﻿using System.Threading;
using System.Runtime.InteropServices;
using System;
using static Free.Ports.zLib.zlib;
using Unicorn.Internal;

public unsafe class GlobalMembers : SDL
{
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: The following #include directive was ignored:
	//#include "../windows/capstone-4.0.1-win32/include/capstone/capstone.h"

	internal static sbyte* strToLower(sbyte* str)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		sbyte* ptr = str;
		while (*ptr != 0)
		{
			if (*ptr >= (sbyte)'A' && *ptr <= (sbyte)'Z')
			{
				*ptr |= 32; // 转换为小写
			}
			ptr++;
		}
		return str;
	}

	/*
	转换一个全小写的十六进制字符串到32位整数，原理是从字符串末尾开始转换
	0x4750524d1a  超过32位长度将只转换低32位
	*/
	internal static uint toUint32(sbyte* str)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		sbyte* ptr = str;

		while (*ptr != 0)
		{
			ptr++;
		}

		uint tmp;
		uint v = 0;
		uint i = 0;
		for (ptr--; ptr >= str && i < 32; ptr--)
		{
			if (*ptr >= (sbyte)'0' && *ptr <= (sbyte)'9')
			{
				tmp = (uint)(*ptr - '0');
			}
			else if (*ptr >= (sbyte)'a' && *ptr <= (sbyte)'f')
			{
				tmp = (uint)(*ptr - 'a' + 10);
			}
			else
			{
				break;
			}
			v |= tmp << (int)i;
			i += 4;
		}
		return v;
	}

	//static int Main(int argc, string[] args)
	//{
	//	csh handle = new csh();

	//	if (argc < 3)
	//	{
	//		Console.Write("usage: de.exe filename offset [address]\n");
	//		Console.Write("       de.exe cfunction.ext 8 0x8000\n");
	//		return 1;
	//	}

	//	//if (cs_open(CS_ARCH_ARM, CS_MODE_ARM, handle) != CS_ERR_OK)
	//	//{
	//	//	return -1;
	//	//}

	//	int offset = Convert.ToInt32(args[2]);
	//	string filename = args[1];
	//	stat s1 = new stat();
	//	stat(filename, s1);
	//	int len = s1.st_size;

	//	Console.Write("offset: {0:D}\n", offset);
	//	Console.Write("file name: {0}\n", filename);
	//	Console.Write("file len: {0:D}\n", len);

	//	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
	//	//ORIGINAL LINE: sbyte *buf = malloc(len);
	//	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
	//	sbyte buf = malloc(len);

	//	int f = open(filename, O_RDONLY | O_RAW);
	//	lseek(f, offset, SEEK_SET);
	//	read(f, buf, len);
	//	close(f);

	//	int address = 0;
	//	if (argc == 4)
	//	{
	//		address = toUint32(strToLower(ref args[3]));
	//		Console.Write("address: 0x{0:X}\n", address);
	//	}
	//	Console.Write('\n');

	//	cs_insn[] insn;
	//	uint count = cs_disasm(handle, buf, len, address, 0, insn);
	//	if (count > 0)
	//	{
	//		for (uint j = 0; j < count; j++)
	//		{
	//			cs_insn cur = insn[j];
	//			//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
	//			//ORIGINAL LINE: printf("0x%" +PRIx64+ ": ", cur->address);
	//			Console.Write("0x%" +PRIx64+ ": ", cur.address);
	//			int n = cur.size;
	//			for (int i = 0; i < n; i++)
	//			{
	//				Console.Write("{0:X2}", cur.bytes[i]);
	//			}
	//			Console.Write("\t{0}\t{1}\n", cur.mnemonic, cur.op_str);
	//		}
	//		cs_free(insn, count);
	//	}
	//	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
	//	free(buf);

	//	cs_close(handle);
	//}
	/*
	此文件直接就是mrp项目mrc/baseLib生成的mrp中的cfunction.ext
	
	函数地址在源码中获取到并由mrp输出到文件，提供以下函数
	
	// printf_ addr:535996, pos:0x2db4[11700]
	// sprintf_ addr:536080, pos:0x2e08[11784]
	// set_putchar addr:536060, pos:0x2df4[11764]
	// memcpy2 addr:531352, pos:0x1b90[7056]
	// memmove2 addr:531384, pos:0x1bb0[7088]
	// strcpy2 addr:536244, pos:0x2eac[11948]
	// strncpy2 addr:536452, pos:0x2f7c[12156]
	// strcat2 addr:536144, pos:0x2e48[11848]
	// strncat2 addr:536300, pos:0x2ee4[12004]
	// memcmp2 addr:531300, pos:0x1b5c[7004]
	// strcmp2 addr:536196, pos:0x2e7c[11900]
	// strncmp2 addr:536392, pos:0x2f40[12096]
	// memchr2 addr:531256, pos:0x1b30[6960]
	// memset2 addr:531464, pos:0x1c00[7168]
	// strlen2 addr:536272, pos:0x2ec8[11976]
	// strstr2 addr:536496, pos:0x2fa8[12200]
	
	*/

	// 由 BreakPoint 软件公司的 Hex Workshop v4.20 生成
	//   http://www.hexworkshop.com
	//   http://www.bpsoft.com
	//
	// 来源文件: cfunction.ext
	//     时间: 2020/2/6 14:40
	// 原始偏移: 0 / 0x00000000
	//     长度: 18524 / 0x0000485C (字节)
	public static byte[] baseLib_cfunction_ext = { 0x4D, 0x52, 0x50, 0x47, 0x43, 0x4D, 0x41, 0x50, 0x38,
        0x40, 0x2D, 0xE9, 0x0C, 0x41, 0x9F, 0xE5, 0x04, 0x40, 0x8F, 0xE0, 0x08, 0x10, 0x14, 0xE5, 0x01,
        0x00, 0x50, 0xE3, 0x64, 0x20, 0x91, 0xE5, 0x14, 0x10, 0xA0, 0xE3, 0x0F, 0x00, 0x00, 0x1A, 0xF4,
        0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x32, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x70, 0xE3, 0x36, 0x00, 0x00, 0x0A, 0x04, 0x10, 0x14, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0x08, 0x00, 0x81, 0xE5, 0xD8, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x10, 0x14, 0xE5, 0x7C, 0x00, 0x81, 0xE5, 0xCC, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x80, 0x00, 0x81, 0xE5, 0x07, 0x00, 0x00, 0xEA, 0xC0, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x32, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x70, 0xE3, 0x26, 0x00, 0x00, 0x0A, 0x04, 0x10, 0x14, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x00, 0x81, 0xE5, 0xC5, 0x01, 0x00, 0xEB, 0x04, 0x10, 0x14, 0xE5, 0x04, 0x00, 0x81, 0xE5, 0xB5, 0x09, 0x00, 0xEB, 0x04, 0x10, 0x14, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x81, 0xE5, 0x1B, 0x00, 0x00, 0x0A, 0xC5, 0x01, 0x00, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0xC6, 0x01, 0x00, 0xEB, 0x04, 0x10, 0x80, 0xE0, 0x04, 0x00, 0x14, 0xE5, 0x08, 0x20, 0x14, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x0C, 0x30, 0x92, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x33, 0xFF, 0x2F, 0xE1, 0xBB, 0x01, 0x00, 0xEB, 0x04, 0x10, 0x14, 0xE5, 0x04, 0x10, 0x91, 0xE5, 0x00, 0x50, 0x41, 0xE0, 0xB7, 0x01, 0x00, 0xEB, 0x04, 0x10, 0x14, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x80, 0xE0, 0x08, 0x10, 0x14, 0xE5, 0x38, 0x30, 0x91, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x33, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x14, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0xE0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0xF0, 0xFF, 0xFF, 0xFF, 0xF0, 0x1D, 0x00, 0x00, 0xCC, 0x1E, 0x00, 0x00, 0xF0, 0x1E, 0x00, 0x00, 0xB8, 0x1B, 0x00, 0x00, 0x78, 0x47, 0x00, 0x00, 0x70, 0x40, 0x2D, 0xE9, 0x01, 0x40, 0xA0, 0xE1, 0x00, 0x50, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0xE3, 0xA2, 0xCF, 0x93, 0xE1, 0x11, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x12, 0xE1, 0xCC, 0x00, 0x00, 0x0A, 0xA2, 0xC7, 0xB0, 0xE1, 0x10, 0x60, 0x86, 0x02, 0x12, 0xC6, 0xA0, 0xE1, 0xAC, 0xEB, 0xB0, 0xE1, 0x0C, 0xC4, 0xA0, 0x01, 0x08, 0x60, 0x86, 0x02, 0xAC, 0xED, 0xB0, 0xE1, 0x0C, 0xC2, 0xA0, 0x01, 0x04, 0x60, 0x86, 0x02, 0xAC, 0xEE, 0xB0, 0xE1, 0x0C, 0xC1, 0xA0, 0x01, 0x02, 0x60, 0x86, 0x02, 0x2C, 0xEF, 0xB0, 0xE1, 0x8C, 0xC0, 0xA0, 0x01, 0x01, 0x60, 0x86, 0x02, 0x17, 0x00, 0x00, 0xEA, 0x80, 0x04, 0x13, 0xE3, 0x12, 0x00, 0x00, 0x1A, 0xA3, 0xC7, 0xB0, 0xE1, 0x10, 0x60, 0x86, 0x02, 0x13, 0xC6, 0xA0, 0xE1, 0xAC, 0xEB, 0xB0, 0xE1, 0x0C, 0xC4, 0xA0, 0x01, 0x08, 0x60, 0x86, 0x02, 0xAC, 0xED, 0xB0, 0xE1, 0x0C, 0xC2, 0xA0, 0x01, 0x04, 0x60, 0x86, 0x02, 0xAC, 0xEE, 0xB0, 0xE1, 0x0C, 0xC1, 0xA0, 0x01, 0x02, 0x60, 0x86, 0x02, 0x2C, 0xEF, 0xB0, 0xE1, 0x8C, 0xC0, 0xA0, 0x01, 0x01, 0x60, 0x86, 0x02, 0x20, 0x30, 0x66, 0xE2, 0x32, 0xC3, 0x8C, 0xE1, 0x12, 0xE6, 0xA0, 0xE1, 0x4C, 0x00, 0x00, 0xEA, 0x03, 0xC0, 0xA0, 0xE1, 0x02, 0xE0, 0xA0, 0xE1, 0x9C, 0x00, 0x00, 0xEA, 0x00, 0x30, 0xA0, 0xE3, 0x8C, 0x00, 0x54, 0xE1, 0x8C, 0x40, 0x44, 0x20, 0x02, 0x30, 0x83, 0x22, 0x0C, 0x00, 0x54, 0xE1, 0x0C, 0x40, 0x44, 0x20, 0x00, 0x30, 0xB3, 0xE2, 0x00, 0xC0, 0x6C, 0xE2, 0x20, 0x20, 0x86, 0xE2, 0x20, 0x00, 0x52, 0xE3, 0x03, 0x00, 0x00, 0x3A, 0x25, 0x0F, 0x94, 0xE1, 0x05, 0x40, 0xA0, 0x01, 0x00, 0x50, 0xA0, 0x03, 0x20, 0x20, 0x42, 0x02, 0x00, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x3A, 0x24, 0x07, 0xB0, 0xE1, 0x04, 0x48, 0xA0, 0x01, 0x10, 0x10, 0x81, 0x02, 0x01, 0xE0, 0x42, 0xE0, 0x08, 0x00, 0x5E, 0xE3, 0x02, 0x00, 0x00, 0x3A, 0x24, 0x0B, 0xB0, 0xE1, 0x04, 0x44, 0xA0, 0x01, 0x08, 0x10, 0x81, 0x02, 0x20, 0x00, 0x61, 0xE2, 0x35, 0x40, 0x84, 0xE1, 0x15, 0x51, 0xA0, 0xE1, 0x01, 0x20, 0x42, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x20, 0x00, 0x00, 0x3A, 0x01, 0x20, 0x42, 0xE2, 0x07, 0x00, 0x02, 0xE2, 0x07, 0x00, 0x20, 0xE2, 0x80, 0x00, 0x90, 0xE0, 0x00, 0xF1, 0x8F, 0xE0, 0x00, 0x00, 0xA0, 0xE1, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x05, 0x50, 0xB5, 0xE0, 0x84, 0x40, 0xBC, 0xE0, 0x04, 0x40, 0x6C, 0x30, 0x08, 0x20, 0x42, 0xE2, 0x02, 0x00, 0x12, 0xE1, 0xE4, 0xFF, 0xFF, 0x5A, 0x34, 0x26, 0xA0, 0xE1, 0x12, 0x46, 0xC4, 0xE1, 0x05, 0x00, 0xB5, 0xE0, 0x04, 0x10, 0xA4, 0xE0, 0x13, 0x16, 0x81, 0xE0, 0x00, 0x30, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x30, 0xA0, 0xE3, 0x0E, 0x00, 0x55, 0xE0, 0x0C, 0x10, 0xD4, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x00, 0x30, 0xB3, 0xE2, 0x0E, 0x00, 0x55, 0xE0, 0x0C, 0x10, 0xD4, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x00, 0x30, 0xB3, 0xE2, 0x0E, 0x00, 0x55, 0xE0, 0x0C, 0x10, 0xD4, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x00, 0x30, 0xB3, 0xE2, 0x00, 0xE0, 0x7E, 0xE2, 0x00, 0xC0, 0xEC, 0xE2, 0x00, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x56, 0xE3, 0x02, 0x00, 0x00, 0x3A, 0x24, 0x07, 0xB0, 0xE1, 0x04, 0x48, 0xA0, 0x01, 0x10, 0x10, 0x81, 0x02, 0x01, 0x20, 0x46, 0xE0, 0x08, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x3A, 0x24, 0x0B, 0xB0, 0xE1, 0x04, 0x44, 0xA0, 0x01, 0x08, 0x10, 0x81, 0x02, 0x20, 0x00, 0x61, 0xE2, 0x35, 0x40, 0x84, 0xE1, 0x15, 0x51, 0xA0, 0xE1, 0x01, 0x20, 0x46, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x20, 0x00, 0x00, 0x3A, 0x01, 0x20, 0x42, 0xE2, 0x03, 0x00, 0x02, 0xE2, 0x03, 0x00, 0x60, 0xE2, 0x80, 0x00, 0x90, 0xE0, 0x80, 0xF1, 0x8F, 0xE0, 0x00, 0x00, 0xA0, 0xE1, 0x05, 0x50, 0xB5, 0xE0, 0x04, 0x40, 0xB4, 0xE0, 0x05, 0x00, 0xBE, 0xE0, 0x04, 0x10, 0xBC, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x05, 0x50, 0xB5, 0xE0, 0x04, 0x40, 0xB4, 0xE0, 0x05, 0x00, 0xBE, 0xE0, 0x04, 0x10, 0xBC, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x05, 0x50, 0xB5, 0xE0, 0x04, 0x40, 0xB4, 0xE0, 0x05, 0x00, 0xBE, 0xE0, 0x04, 0x10, 0xBC, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x05, 0x50, 0xB5, 0xE0, 0x04, 0x40, 0xB4, 0xE0, 0x05, 0x00, 0xBE, 0xE0, 0x04, 0x10, 0xBC, 0xE0, 0x00, 0x50, 0xA0, 0x21, 0x01, 0x40, 0xA0, 0x21, 0x04, 0x20, 0x42, 0xE2, 0x02, 0x00, 0x12, 0xE1, 0xE4, 0xFF, 0xFF, 0x5A, 0x35, 0x26, 0xA0, 0xE1, 0x12, 0x56, 0xC5, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x05, 0x00, 0xB5, 0xE0, 0x00, 0x10, 0xA1, 0xE2, 0x13, 0xE6, 0xB0, 0xE1, 0x00, 0x10, 0xA1, 0xE2, 0x0E, 0x00, 0x90, 0xE0, 0x00, 0x10, 0xA1, 0xE2, 0x34, 0x36, 0xA0, 0xE1, 0x13, 0x46, 0xC4, 0xE1, 0x74, 0x26, 0x82, 0xE1, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x0E, 0x20, 0x55, 0xE0, 0x0C, 0x30, 0xD4, 0xE0, 0x05, 0x20, 0xA0, 0x31, 0x04, 0x30, 0xA0, 0x31, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x00, 0xA1, 0xE0, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x70, 0x40, 0xBD, 0xE8, 0x31, 0x00, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x00, 0x20, 0xA0, 0xE3, 0xA1, 0xC1, 0x70, 0xE0, 0x20, 0x00, 0x00, 0x3A, 0x21, 0xC4, 0x70, 0xE0, 0x0F, 0x00, 0x00, 0x3A, 0x00, 0x04, 0xA0, 0xE1, 0xFF, 0x24, 0x82, 0xE3, 0x21, 0xC2, 0x70, 0xE0, 0x17, 0x00, 0x00, 0x3A, 0x21, 0xC4, 0x70, 0xE0, 0x09, 0x00, 0x00, 0x3A, 0x00, 0x04, 0xA0, 0xE1, 0xFF, 0x28, 0x82, 0xE3, 0x21, 0xC4, 0x70, 0xE0, 0x00, 0x04, 0xA0, 0x21, 0xFF, 0x2C, 0x82, 0x23, 0x21, 0xC2, 0x70, 0xE0, 0x0E, 0x00, 0x00, 0x3A, 0x00, 0xC0, 0x70, 0xE2, 0x1C, 0x00, 0x00, 0x2A, 0x20, 0x04, 0xA0, 0x21, 0xA1, 0xC3, 0x70, 0xE0, 0x80, 0x13, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0x21, 0xC3, 0x70, 0xE0, 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0xA1, 0xC2, 0x70, 0xE0, 0x80, 0x12, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0x21, 0xC2, 0x70, 0xE0, 0x00, 0x12, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0xA1, 0xC1, 0x70, 0xE0, 0x80, 0x11, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0x21, 0xC1, 0x70, 0xE0, 0x00, 0x11, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0xA1, 0xC0, 0x70, 0xE0, 0x80, 0x10, 0x41, 0x20, 0x02, 0x20, 0xA2, 0xE0, 0x01, 0xC0, 0x70, 0xE0, 0x00, 0x10, 0x41, 0x20, 0x02, 0x20, 0xB2, 0xE0, 0xE5, 0xFF, 0xFF, 0x2A, 0x02, 0x00, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x47, 0x00, 0x00, 0x02, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0x0D, 0x00, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x03, 0x00, 0x00, 0xEB, 0x04, 0x00, 0x80, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x47, 0x00, 0x00, 0x00, 0x90, 0x99, 0xE5, 0x00, 0x90, 0x99, 0xE5, 0x04, 0x00, 0x9F, 0xE5, 0x09, 0x00, 0x80, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x01, 0x00, 0x00, 0x78, 0x47, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x04, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x10, 0x40, 0xBD, 0xE8, 0x22, 0x00, 0x00, 0xEA, 0x70, 0xB5, 0x0E, 0x4E, 0x0D, 0x1C, 0x01, 0x1C, 0x04, 0x1C, 0x7E, 0x44, 0x30, 0x1C, 0x00, 0xF0, 0x00, 0xF8, 0x02, 0x1C, 0xB0, 0x42, 0x06, 0xD1, 0x29, 0x1C, 0x20, 0x1C, 0x00, 0xF0, 0x4A, 0xF8, 0x70, 0xBC, 0x08, 0xBC, 0x18, 0x47, 0x06, 0x48, 0x78, 0x44, 0x82, 0x42, 0x03, 0xD0, 0x29, 0x1C, 0x20, 0x1C, 0x00, 0xF0, 0x39, 0xF8, 0x00, 0x20, 0xF2, 0xE7, 0x00, 0x00, 0x3D, 0xFA, 0xF7, 0xFF, 0x1D, 0xFA, 0xF7, 0xFF, 0x38, 0xB5, 0x07, 0xB4, 0x83, 0xB0, 0x0A, 0x9C, 0x01, 0xAD, 0x29, 0x1C, 0x00, 0x20, 0x05, 0xAB, 0x03, 0xAA, 0x00, 0x94, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x28, 0x05, 0xD0, 0x01, 0xA9, 0x03, 0xC9, 0x07, 0xB0, 0x30, 0xBC, 0x08, 0xBC, 0x18, 0x47, 0x1F, 0x20, 0x80, 0x06, 0x04, 0x40, 0x21, 0x1C, 0x02, 0x20, 0xFF, 0xF7, 0xB6, 0xEF, 0x00, 0x20, 0x00, 0x21, 0x03, 0xC5, 0x01, 0xA9, 0x03, 0xC9, 0xEE, 0xE7, 0x00, 0x00, 0x78, 0x47, 0x00, 0x00, 0x18, 0x00, 0xA0, 0xE3, 0x08, 0x10, 0x9F, 0xE5, 0x56, 0x34, 0x12, 0xEF, 0x1E, 0xFF, 0x2F, 0xE1, 0x31, 0x01, 0x00, 0x00, 0x26, 0x00, 0x02, 0x00, 0x00, 0x47, 0x08, 0x47, 0x10, 0x47, 0x18, 0x47, 0x20, 0x47, 0x28, 0x47, 0x30, 0x47, 0x38, 0x47, 0x38, 0xB5, 0x42, 0x1E, 0x0D, 0x2A, 0x24, 0xA4, 0x26, 0xD2, 0x17, 0x22, 0x23, 0x4B, 0x42, 0x43, 0x7B, 0x44, 0xD5, 0x18, 0x17, 0x3D, 0x02, 0x28, 0x14, 0xD1, 0x48, 0x01, 0x01, 0xD5, 0x20, 0xA4, 0x1B, 0xE0, 0x24, 0x48, 0x08, 0x40, 0x01, 0xD0, 0x23, 0xA4, 0x16, 0xE0, 0xC8, 0x00, 0x01, 0xD5, 0x25, 0xA4, 0x12, 0xE0, 0x88, 0x00, 0x01, 0xD5, 0x26, 0xA4, 0x0E, 0xE0, 0x48, 0x00, 0x0C, 0xD5, 0x27, 0xA4, 0x0A, 0xE0, 0x08, 0x28, 0x01, 0xD1, 0x0C, 0x1C, 0x06, 0xE0, 0x09, 0x28, 0x04, 0xD1, 0x01, 0x29, 0x02, 0xD1, 0x26, 0xA5, 0x00, 0xE0, 0x2B, 0xA5, 0x0A, 0x20, 0x00, 0xF0, 0x60, 0xF8, 0x28, 0x78, 0x00, 0x28, 0x06, 0xD0, 0x28, 0x78, 0x01, 0x35, 0x00, 0xF0, 0x59, 0xF8, 0x28, 0x78, 0x00, 0x28, 0xF8, 0xD1, 0x20, 0x78, 0x00, 0x28, 0x06, 0xD0, 0x20, 0x78, 0x01, 0x34, 0x00, 0xF0, 0x4F, 0xF8, 0x20, 0x78, 0x00, 0x28, 0xF8, 0xD1, 0x0A, 0x20, 0x00, 0xF0, 0x49, 0xF8, 0x38, 0xBC, 0x08, 0xBC, 0x01, 0x20, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x40, 0x00, 0x00, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x4F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x20, 0x42, 0x79, 0x20, 0x5A, 0x65, 0x72, 0x6F, 0x00, 0x00, 0x4F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x00, 0x00, 0x00, 0x00, 0x55, 0x6E, 0x64, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x00, 0x00, 0x00, 0x49, 0x6E, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x52, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x00, 0x3A, 0x20, 0x48, 0x65, 0x61, 0x70, 0x20, 0x6D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x20, 0x63, 0x6F, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x00, 0x55, 0x6E, 0x6B, 0x6E, 0x6F, 0x77, 0x6E, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x6C, 0x00, 0x00, 0x78, 0x47, 0x00, 0x00, 0x1E, 0xFF, 0x2F, 0xE1, 0x08, 0xB5, 0x00, 0xAB, 0x18, 0x70, 0x03, 0x20, 0x69, 0x46, 0xAB, 0xDF, 0x01, 0xB0, 0x08, 0xBC, 0x18, 0x47, 0x00, 0x00, 0x08, 0x00, 0x9F, 0xE5, 0x08, 0x10, 0x9F, 0xE5, 0x01, 0x00, 0x80, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x00, 0x90, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x9F, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x50, 0x48, 0x00, 0x00, 0xFF, 0x4D, 0x2D, 0xE9, 0x48, 0xD0, 0x4D, 0xE2, 0x78, 0xB0, 0x8D, 0xE2, 0x80, 0x09, 0x9B, 0xE8, 0x00, 0x40, 0xA0, 0xE3, 0x18, 0x40, 0x8D, 0xE5, 0x88, 0xA0, 0x9D, 0xE5, 0x08, 0x30, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0xB6, 0x5F, 0x8F, 0xE2, 0x6C, 0x0B, 0x00, 0xEB, 0x09, 0x00, 0x00, 0x0A, 0xD4, 0x02, 0x9F, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x8F, 0xE0, 0x84, 0x20, 0x9D, 0xE5, 0x07, 0x04, 0x8D, 0xE8, 0x48, 0x30, 0x8D, 0xE2, 0x0F, 0x00, 0x93, 0xE8, 0x4C, 0x02, 0x00, 0xEB, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0xAC, 0x0F, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x07, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x0D, 0x0C, 0x00, 0xEB, 0x09, 0x00, 0x00, 0x2A, 0xA0, 0x02, 0x9F, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x8F, 0xE0, 0x84, 0x20, 0x9D, 0xE5, 0x07, 0x04, 0x8D, 0xE8, 0x48, 0x30, 0x8D, 0xE2, 0x0F, 0x00, 0x93, 0xE8, 0x3C, 0x02, 0x00, 0xEB, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0x9F, 0x0F, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x07, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0xDC, 0x0B, 0x00, 0xEB, 0x0F, 0x00, 0x00, 0x9A, 0x04, 0x00, 0x0A, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x64, 0x02, 0x9F, 0x05, 0x84, 0x20, 0x9D, 0xE5, 0x03, 0x10, 0xA0, 0x03, 0x04, 0x10, 0xA0, 0x13, 0x0A, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x8F, 0x00, 0x50, 0x02, 0x9F, 0x15, 0x00, 0x00, 0x8F, 0x10, 0x0F, 0x00, 0x8D, 0xE8, 0x48, 0x30, 0x8D, 0xE2, 0x0F, 0x00, 0x93, 0xE8, 0x26, 0x02, 0x00, 0xEB, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0x8D, 0x0F, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x07, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0xC6, 0x0B, 0x00, 0xEB, 0x05, 0x00, 0x00, 0x8A, 0x89, 0x0F, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x07, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0xE1, 0x0B, 0x00, 0xEB, 0x02, 0x00, 0x00, 0x2A, 0x00, 0x00, 0xA0, 0xE3, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x95, 0xE8, 0xD9, 0x0B, 0x00, 0xEB, 0x07, 0x00, 0x00, 0x2A, 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x95, 0xE8, 0x07, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x3F, 0x0A, 0x00, 0xEB, 0x00, 0x70, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1, 0xD4, 0x51, 0x9F, 0xE5, 0x40, 0x0E, 0x1A, 0xE3, 0x05, 0x50, 0x8F, 0xE0, 0x06, 0xB0, 0xA0, 0x03, 0x0A, 0x00, 0x00, 0x0A, 0x30, 0x10, 0xA0, 0xE3, 0x24, 0x20, 0x8D, 0xE2, 0x05, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x20, 0x00, 0x54, 0xE3, 0x00, 0x10, 0xC2, 0xE7, 0x01, 0xB0, 0x4B, 0xE2, 0x01, 0x00, 0x00, 0x2A, 0x09, 0x00, 0x5B, 0xE3, 0xF7, 0xFF, 0xFF, 0x8A, 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x2D, 0x0B, 0x00, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x83, 0x0B, 0x00, 0xEB, 0x08, 0x30, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x25, 0x0A, 0x00, 0xEB, 0x8B, 0x21, 0x85, 0xE0, 0x44, 0x20, 0x8D, 0xE5, 0x0C, 0x00, 0x92, 0xE8, 0xD5, 0x0B, 0x00, 0xEB, 0x10, 0x00, 0x8D, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x4B, 0x0B, 0x00, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x73, 0x0B, 0x00, 0xEB, 0x10, 0x20, 0x9D, 0xE5, 0x14, 0x30, 0x9D, 0xE5, 0x19, 0x0A, 0x00, 0xEB, 0x1C, 0x00, 0x8D, 0xE5, 0x51, 0x0F, 0x8F, 0xE2, 0x20, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x90, 0xE8, 0x1C, 0x00, 0x9D, 0xE5, 0x85, 0x0B, 0x00, 0xEB, 0x08, 0x00, 0x00, 0x9A, 0x01, 0x50, 0x85, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0x66, 0x0B, 0x00, 0xEB, 0x44, 0x20, 0x9D, 0xE5, 0x0C, 0x00, 0x92, 0xE8, 0x7E, 0x0B, 0x00, 0xEB, 0x00, 0x50, 0xA0, 0x23, 0x01, 0x60, 0x86, 0x22, 0x0A, 0x00, 0x00, 0xEA, 0x42, 0x0F, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x1C, 0x00, 0x9D, 0xE5, 0x20, 0x10, 0x9D, 0xE5, 0x97, 0x0B, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x15, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x50, 0x85, 0xE2, 0x00, 0x00, 0x5B, 0xE3, 0x12, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE1, 0x55, 0x0B, 0x00, 0xEB, 0x08, 0x30, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0xF7, 0x09, 0x00, 0xEB, 0xC0, 0x80, 0x8F, 0xE2, 0x0C, 0x00, 0x98, 0xE8, 0x00, 0x50, 0xA0, 0xE1, 0x01, 0x70, 0xA0, 0xE1, 0x85, 0x0B, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x2A, 0x07, 0x10, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x98, 0xE8, 0x5F, 0x0B, 0x00, 0xEB, 0x34, 0x00, 0x00, 0x9A, 0x01, 0x00, 0x16, 0xE3, 0x01, 0x60, 0x86, 0x12, 0x31, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0x43, 0x00, 0x00, 0x2A, 0x88, 0x00, 0x9F, 0xE5, 0x24, 0x30, 0x8D, 0xE2, 0x90, 0x25, 0x81, 0xE0, 0x01, 0xB0, 0x4B, 0xE2, 0xA1, 0x11, 0xA0, 0xE1, 0x81, 0x10, 0x41, 0xE0, 0x01, 0x11, 0x81, 0xE0, 0x81, 0x10, 0x85, 0xE0, 0x30, 0x20, 0x81, 0xE2, 0x04, 0x10, 0xA0, 0xE1, 0x01, 0x20, 0xC3, 0xE7, 0x90, 0x25, 0x81, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0xA1, 0x51, 0xB0, 0xE1, 0x30, 0x10, 0xA0, 0x03, 0x17, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x54, 0xE3, 0xEF, 0xFF, 0xFF, 0x3A, 0x30, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x39, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0x28, 0x39, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7F, 0xE4, 0x38, 0x00, 0x00, 0xD4, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xCD, 0xCD, 0x41, 0x00, 0x00, 0x00, 0x00, 0x65, 0xCD, 0xCD, 0xC1, 0xE4, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0xCD, 0xCC, 0xCC, 0xCC, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xC3, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x20, 0x00, 0x54, 0xE3, 0x19, 0x00, 0x00, 0x2A, 0x01, 0xB0, 0x5B, 0xE2, 0xF8, 0xFF, 0xFF, 0x2A, 0x04, 0x00, 0xA0, 0xE1, 0x2E, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC3, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x20, 0x00, 0x54, 0xE3, 0x11, 0x00, 0x00, 0x2A, 0x34, 0x11, 0x9F, 0xE5, 0x24, 0x30, 0x8D, 0xE2, 0x91, 0x26, 0xC0, 0xE0, 0x40, 0x01, 0xA0, 0xE1, 0xC0, 0x0F, 0x40, 0xE0, 0x80, 0x00, 0x40, 0xE0, 0x00, 0x01, 0x80, 0xE0, 0x80, 0x00, 0x86, 0xE0, 0x30, 0x20, 0x80, 0xE2, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x20, 0xC3, 0xE7, 0x91, 0x26, 0xC0, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0x40, 0x01, 0xA0, 0xE1, 0xC0, 0x6F, 0x40, 0xE0, 0x00, 0x00, 0x56, 0xE3, 0x20, 0x00, 0x54, 0x13, 0xEF, 0xFF, 0xFF, 0x3A, 0x02, 0x00, 0x1A, 0xE3, 0x16, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x1A, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x84, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x18, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x0A, 0xE2, 0x01, 0x00, 0x90, 0xE1, 0x84, 0x00, 0x9D, 0x15, 0x01, 0x00, 0x40, 0x12, 0x84, 0x00, 0x8D, 0x15, 0x30, 0x10, 0xA0, 0xE3, 0x24, 0x20, 0x8D, 0xE2, 0x02, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xC2, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x84, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x54, 0xE1, 0x02, 0x00, 0x00, 0x2A, 0x20, 0x00, 0x54, 0xE3, 0xF7, 0xFF, 0xFF, 0x3A, 0x19, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x54, 0xE3, 0x17, 0x00, 0x00, 0x2A, 0x18, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x2D, 0x10, 0xA0, 0xE3, 0x24, 0x20, 0x8D, 0xE2, 0x00, 0x10, 0xC2, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x0E, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x1A, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x2B, 0x10, 0xA0, 0xE3, 0x24, 0x20, 0x8D, 0xE2, 0x00, 0x10, 0xC2, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x1A, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x20, 0x10, 0xA0, 0xE3, 0x24, 0x20, 0x8D, 0xE2, 0x00, 0x10, 0xC2, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x84, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x8D, 0xE2, 0x11, 0x00, 0x8D, 0xE8, 0x08, 0x20, 0x8D, 0xE5, 0x0C, 0xA0, 0x8D, 0xE5, 0x48, 0x30, 0x8D, 0xE2, 0x0F, 0x00, 0x93, 0xE8, 0x33, 0x01, 0x00, 0xEB, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0x67, 0x66, 0x66, 0x66, 0x10, 0x40, 0x2D, 0xE9, 0x04, 0x07, 0x00, 0xEB, 0xDC, 0x40, 0x9F, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0x09, 0x40, 0x84, 0xE0, 0x18, 0x00, 0x84, 0xE5, 0xD0, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x00, 0x10, 0xE5, 0xC8, 0x20, 0x9F, 0xE5, 0x68, 0x10, 0x90, 0xE5, 0x09, 0x20, 0x82, 0xE0, 0x2C, 0x10, 0x84, 0xE5, 0x0C, 0x10, 0x90, 0xE5, 0x30, 0x10, 0x84, 0xE5, 0x10, 0x10, 0x90, 0xE5, 0x34, 0x10, 0x84, 0xE5, 0x14, 0x10, 0x90, 0xE5, 0x38, 0x10, 0x84, 0xE5, 0x18, 0x10, 0x90, 0xE5, 0x3C, 0x10, 0x84, 0xE5, 0x1C, 0x10, 0x90, 0xE5, 0x40, 0x10, 0x84, 0xE5, 0x20, 0x10, 0x90, 0xE5, 0x44, 0x10, 0x84, 0xE5, 0x24, 0x10, 0x90, 0xE5, 0x48, 0x10, 0x84, 0xE5, 0x28, 0x10, 0x90, 0xE5, 0x4C, 0x10, 0x84, 0xE5, 0x2C, 0x10, 0x90, 0xE5, 0x50, 0x10, 0x84, 0xE5, 0x30, 0x10, 0x90, 0xE5, 0x54, 0x10, 0x84, 0xE5, 0x34, 0x10, 0x90, 0xE5, 0x58, 0x10, 0x84, 0xE5, 0x38, 0x10, 0x90, 0xE5, 0x5C, 0x10, 0x84, 0xE5, 0x3C, 0x10, 0x90, 0xE5, 0x60, 0x10, 0x84, 0xE5, 0x40, 0x10, 0x90, 0xE5, 0x64, 0x10, 0x84, 0xE5, 0x44, 0x10, 0x90, 0xE5, 0x68, 0x10, 0x84, 0xE5, 0x48, 0x10, 0x90, 0xE5, 0x6C, 0x10, 0x84, 0xE5, 0x4C, 0x10, 0x90, 0xE5, 0x70, 0x10, 0x84, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x82, 0xE5, 0x08, 0x32, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x24, 0x20, 0x9F, 0xE5, 0x07, 0x10, 0xA0, 0xE3, 0x33, 0xFF, 0x2F, 0xE1, 0x9C, 0xCD, 0x40, 0xE2, 0x0F, 0xC0, 0x5C, 0xE2, 0x14, 0x00, 0x9F, 0x05, 0x28, 0x00, 0x84, 0x05, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x40, 0xF3, 0xFF, 0xFF, 0x64, 0x01, 0x00, 0x00, 0x0F, 0x27, 0x00, 0x00, 0x0D, 0x27, 0x00, 0x00, 0xF0, 0x4D, 0x2D, 0xE9, 0x10, 0xD0, 0x4D, 0xE2, 0x03, 0x50, 0xA0, 0xE1, 0x48, 0x30, 0x9D, 0xE5, 0x02, 0x40, 0xA0, 0xE1, 0x44, 0x20, 0x9D, 0xE5, 0x30, 0xB0, 0x8D, 0xE2, 0x01, 0xE0, 0xA0, 0xE1, 0x00, 0xC0, 0xA0, 0xE1, 0x03, 0x08, 0x9B, 0xE8, 0x3C, 0x70, 0x9D, 0xE5, 0x40, 0x80, 0x9D, 0xE5, 0x30, 0xA0, 0xA0, 0xE3, 0x02, 0x00, 0x13, 0xE3, 0x16, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x52, 0xE3, 0x01, 0x60, 0x03, 0x12, 0x00, 0x00, 0x56, 0x13, 0x0C, 0x60, 0x03, 0x12, 0x0B, 0x60, 0x96, 0x11, 0x01, 0x20, 0x42, 0x12, 0x03, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x60, 0xA0, 0xE1, 0x06, 0xA0, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x08, 0x00, 0x51, 0xE1, 0x20, 0x00, 0x51, 0x33, 0xF9, 0xFF, 0xFF, 0x3A, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x60, 0xA0, 0xE1, 0x06, 0xA0, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x01, 0x60, 0x03, 0xE2, 0x00, 0x00, 0x56, 0xE3, 0x02, 0x00, 0x51, 0x11, 0x20, 0x00, 0x51, 0x33, 0xF7, 0xFF, 0xFF, 0x3A, 0x10, 0x00, 0x13, 0xE3, 0x2B, 0x00, 0x00, 0x0A, 0x40, 0x0E, 0x13, 0xE3, 0x0A, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x51, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x51, 0xE1, 0x02, 0x00, 0x51, 0x11, 0x05, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x51, 0xE2, 0x03, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x57, 0xE3, 0x13, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x01, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x57, 0xE3, 0x0F, 0x00, 0x00, 0x1A, 0x20, 0x00, 0x13, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x20, 0x00, 0x51, 0xE3, 0x2E, 0x00, 0x00, 0x2A, 0x01, 0x60, 0xA0, 0xE1, 0x78, 0x70, 0xA0, 0xE3, 0x06, 0x70, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x0E, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x51, 0xE3, 0x27, 0x00, 0x00, 0x2A, 0x01, 0x60, 0xA0, 0xE1, 0x58, 0x70, 0xA0, 0xE3, 0x06, 0x70, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x07, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0x1A, 0x20, 0x00, 0x51, 0xE3, 0x1E, 0x00, 0x00, 0x2A, 0x01, 0x60, 0xA0, 0xE1, 0x62, 0x70, 0xA0, 0xE3, 0x06, 0x70, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x20, 0x00, 0x51, 0xE3, 0x18, 0x00, 0x00, 0x2A, 0x01, 0x60, 0xA0, 0xE1, 0x06, 0xA0, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x20, 0x00, 0x51, 0xE3, 0x13, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x5B, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x60, 0xA0, 0xE1, 0x2D, 0x70, 0xA0, 0xE3, 0x06, 0x70, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x0C, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x13, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x60, 0xA0, 0xE1, 0x2B, 0x70, 0xA0, 0xE3, 0x06, 0x70, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x05, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x13, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x60, 0xA0, 0xE1, 0x20, 0x70, 0xA0, 0xE3, 0x06, 0x70, 0xC0, 0xE7, 0x01, 0x10, 0x81, 0xE2, 0x0F, 0x00, 0x8D, 0xE8, 0x05, 0x30, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x0E, 0x10, 0xA0, 0xE1, 0x0C, 0x00, 0xA0, 0xE1, 0x80, 0x00, 0x00, 0xEB, 0x10, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0xFF, 0x4D, 0x2D, 0xE9, 0x40, 0xD0, 0x4D, 0xE2, 0x70, 0x00, 0x9D, 0xE5, 0x84, 0x40, 0x9D, 0xE5, 0x74, 0x80, 0x9D, 0xE5, 0x78, 0xB0, 0x8D, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xC4, 0x03, 0x40, 0x0E, 0x14, 0xE3, 0x40, 0x0C, 0x9B, 0xE8, 0x00, 0x50, 0xA0, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x20, 0x10, 0x04, 0xE2, 0x00, 0x00, 0x51, 0xE3, 0x61, 0x70, 0xA0, 0x03, 0x41, 0x70, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x35, 0xFD, 0xFF, 0xEB, 0xFF, 0x10, 0x01, 0xE2, 0x0A, 0x00, 0x51, 0xE3, 0x30, 0x20, 0x81, 0x32, 0x02, 0x00, 0x00, 0x3A, 0x20, 0x20, 0x04, 0xE2, 0x01, 0x10, 0x87, 0xE0, 0x0A, 0x20, 0x41, 0xE2, 0x05, 0x10, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0x20, 0x30, 0x8D, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x20, 0x00, 0x55, 0x13, 0x01, 0x20, 0xC3, 0xE7, 0xEE, 0xFF, 0xFF, 0x3A, 0x18, 0x40, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE2, 0x40, 0x0C, 0x80, 0xE8, 0x20, 0x10, 0x8D, 0xE2, 0x22, 0x01, 0x8D, 0xE8, 0x40, 0x30, 0x8D, 0xE2, 0x0F, 0x00, 0x93, 0xE8, 0x62, 0xFF, 0xFF, 0xEB, 0x50, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0xFF, 0x4D, 0x2D, 0xE9, 0x40, 0xD0, 0x4D, 0xE2, 0x40, 0x0F, 0x8F, 0xE2, 0xFC, 0x00, 0x8F, 0xE2, 0x70, 0x40, 0x9D, 0xE5, 0x74, 0x50, 0x9D, 0xE5, 0x8C, 0x60, 0x9D, 0xE5, 0x7C, 0x80, 0x9D, 0xE5, 0x80, 0xA0, 0x9D, 0xE5, 0x0C, 0x00, 0x90, 0xE8, 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x00, 0x55, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x10, 0x60, 0xC6, 0x03, 0x40, 0x0E, 0x16, 0xE3, 0x00, 0x70, 0xA0, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xC4, 0x00, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x00, 0x55, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x1D, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x06, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x61, 0xB0, 0xA0, 0x03, 0x41, 0xB0, 0xA0, 0x13, 0x0A, 0x30, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x25, 0xFC, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0xFF, 0x00, 0x02, 0xE2, 0x01, 0x50, 0xA0, 0xE1, 0x03, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0x50, 0xE3, 0x30, 0x10, 0x80, 0x32, 0x02, 0x00, 0x00, 0x3A, 0x20, 0x10, 0x06, 0xE2, 0x00, 0x00, 0x8B, 0xE0, 0x0A, 0x10, 0x40, 0xE2, 0x07, 0x00, 0xA0, 0xE1, 0x20, 0x20, 0x8D, 0xE2, 0x00, 0x10, 0xC2, 0xE7, 0x54, 0x00, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x00, 0x55, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x01, 0x70, 0x87, 0xE2, 0x20, 0x00, 0x57, 0x13, 0xE5, 0xFF, 0xFF, 0x3A, 0x0A, 0x10, 0xA0, 0xE1, 0x84, 0x10, 0x9D, 0xE5, 0x88, 0x20, 0x9D, 0xE5, 0x10, 0x00, 0x8D, 0xE2, 0x46, 0x00, 0x80, 0xE8, 0x0C, 0x80, 0x8D, 0xE5, 0x78, 0x30, 0x9D, 0xE5, 0x20, 0x10, 0x8D, 0xE2, 0x82, 0x00, 0x8D, 0xE8, 0x08, 0x30, 0x8D, 0xE5, 0x40, 0x30, 0x8D, 0xE2, 0x0F, 0x00, 0x93, 0xE8, 0x1E, 0xFF, 0xFF, 0xEB, 0x50, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x52, 0xE1, 0x02, 0x00, 0xC1, 0x37, 0x1E, 0xFF, 0x2F, 0xE1, 0x14, 0x10, 0x9F, 0xE5, 0x09, 0x10, 0x81, 0xE0, 0x00, 0x10, 0x91, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x50, 0x13, 0x11, 0xFF, 0x2F, 0x11, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0x2F, 0xE1, 0xF0, 0x4D, 0x2D, 0xE9, 0x08, 0xD0, 0x4D, 0xE2, 0x00, 0x80, 0xA0, 0xE1, 0x34, 0x00, 0x9D, 0xE5, 0x2C, 0x50, 0x9D, 0xE5, 0x30, 0x70, 0x9D, 0xE5, 0x04, 0x20, 0x8D, 0xE5, 0x03, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0x02, 0x40, 0xA0, 0xE1, 0x03, 0x00, 0x10, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x05, 0x60, 0xA0, 0xE1, 0x07, 0x00, 0x55, 0xE1, 0x08, 0x00, 0x00, 0x2A, 0x04, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x0B, 0x30, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x20, 0x00, 0xA0, 0xE3, 0x38, 0xFF, 0x2F, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x07, 0x00, 0x56, 0xE1, 0xF6, 0xFF, 0xFF, 0x3A, 0x00, 0x00, 0x55, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x9D, 0xE5, 0x04, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x45, 0xE2, 0x05, 0x00, 0xD0, 0xE7, 0x01, 0x40, 0x84, 0xE2, 0x0B, 0x30, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x55, 0xE3, 0xF5, 0xFF, 0xFF, 0x1A, 0x34, 0x00, 0x9D, 0xE5, 0x02, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x9D, 0x15, 0x00, 0x00, 0x44, 0x10, 0x07, 0x00, 0x50, 0x11, 0x09, 0x00, 0x00, 0x2A, 0x04, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x0B, 0x30, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x20, 0x00, 0xA0, 0xE3, 0x38, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x44, 0xE0, 0x07, 0x00, 0x50, 0xE1, 0xF5, 0xFF, 0xFF, 0x3A, 0x04, 0x00, 0xA0, 0xE1, 0x08, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0xF0, 0x4D, 0x2D, 0xE9, 0x40, 0xD0, 0x4D, 0xE2, 0x00, 0xA0, 0xA0, 0xE1, 0x60, 0x70, 0x9D, 0xE5, 0x01, 0xB0, 0xB0, 0xE1, 0x03, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0xD4, 0xE5, 0x2C, 0xA6, 0x9F, 0x05, 0x02, 0x80, 0xA0, 0xE1, 0x0A, 0xA0, 0x8F, 0x00, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x60, 0xA0, 0xE3, 0x24, 0x02, 0x00, 0x0A, 0x00, 0x00, 0xD4, 0xE5, 0x25, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x3A, 0xFF, 0x2F, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x17, 0x02, 0x00, 0xEA, 0x01, 0x50, 0x84, 0xE2, 0x00, 0x40, 0xA0, 0xE3, 0x00, 0x00, 0xD5, 0xE5, 0x2B, 0x00, 0x50, 0xE3, 0x04, 0x40, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0xFA, 0xFF, 0xFF, 0x0A, 0x08, 0x00, 0x00, 0xCA, 0x20, 0x00, 0x50, 0xE3, 0x08, 0x40, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0xF5, 0xFF, 0xFF, 0x0A, 0x23, 0x00, 0x50, 0xE3, 0x10, 0x40, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0xF1, 0xFF, 0xFF, 0x0A, 0x07, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x50, 0xE3, 0x02, 0x40, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0xEC, 0xFF, 0xFF, 0x0A, 0x30, 0x00, 0x50, 0xE3, 0x01, 0x40, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0xE8, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x3C, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0xD5, 0xE5, 0x30, 0x10, 0x40, 0xE2, 0x09, 0x00, 0x51, 0xE3, 0x0A, 0x00, 0x00, 0x8A, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x00, 0xD5, 0xE4, 0x01, 0x11, 0x81, 0xE0, 0x81, 0x00, 0x80, 0xE0, 0x30, 0x10, 0x40, 0xE2, 0x00, 0x00, 0xD5, 0xE5, 0x30, 0x00, 0x40, 0xE2, 0x09, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0x9A, 0x3C, 0x10, 0x8D, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x2A, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x97, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x04, 0x10, 0x90, 0xE4, 0x00, 0x00, 0x87, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x3C, 0x10, 0x8D, 0xA5, 0x00, 0x00, 0x61, 0xB2, 0x3C, 0x00, 0x8D, 0xB5, 0x02, 0x40, 0x84, 0xB3, 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0xD5, 0xE5, 0x2E, 0x00, 0x50, 0xE3, 0x18, 0x00, 0x00, 0x1A, 0x01, 0x00, 0xF5, 0xE5, 0x40, 0x4E, 0x84, 0xE3, 0x30, 0x10, 0x40, 0xE2, 0x09, 0x00, 0x51, 0xE3, 0x0A, 0x00, 0x00, 0x8A, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xD5, 0xE4, 0x00, 0x01, 0x80, 0xE0, 0x80, 0x00, 0x81, 0xE0, 0x00, 0x10, 0xD5, 0xE5, 0x30, 0x00, 0x40, 0xE2, 0x30, 0x10, 0x41, 0xE2, 0x09, 0x00, 0x51, 0xE3, 0xF7, 0xFF, 0xFF, 0x9A, 0x38, 0x00, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0x2A, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x97, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x04, 0x10, 0x90, 0xE4, 0x00, 0x00, 0x87, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x10, 0xA0, 0xD3, 0x38, 0x10, 0x8D, 0xE5, 0x00, 0x00, 0xD5, 0xE5, 0x68, 0x00, 0x50, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x6A, 0x00, 0x50, 0xE3, 0x80, 0x4F, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0x10, 0x00, 0x00, 0x0A, 0x6C, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x7A, 0x00, 0x50, 0xE3, 0x40, 0x4F, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0x0A, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xF5, 0xE5, 0x40, 0x4F, 0x84, 0xE3, 0x6C, 0x00, 0x50, 0xE3, 0x80, 0x4F, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0x04, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xF5, 0xE5, 0x80, 0x40, 0x84, 0xE3, 0x68, 0x00, 0x50, 0xE3, 0x40, 0x40, 0x84, 0x03, 0x01, 0x50, 0x85, 0x02, 0x00, 0xC0, 0xD5, 0xE5, 0x66, 0x00, 0x5C, 0xE3, 0xF9, 0x00, 0x00, 0x0A, 0x0E, 0x00, 0x00, 0xCA, 0x62, 0x00, 0x5C, 0xE3, 0x2A, 0x00, 0x00, 0x0A, 0x06, 0x00, 0x00, 0xCA, 0x25, 0x00, 0x5C, 0xE3, 0x94, 0x01, 0x00, 0x0A, 0x46, 0x00, 0x5C, 0xE3, 0xF1, 0x00, 0x00, 0x0A, 0x58, 0x00, 0x5C, 0xE3, 0x98, 0x01, 0x00, 0x1A, 0x22, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x5C, 0xE3, 0x04, 0x01, 0x00, 0x0A, 0x64, 0x00, 0x5C, 0xE3, 0x93, 0x01, 0x00, 0x1A, 0x1D, 0x00, 0x00, 0xEA, 0x73, 0x00, 0x5C, 0xE3, 0x31, 0x01, 0x00, 0x0A, 0x17, 0x00, 0x00, 0xCA, 0x69, 0x00, 0x5C, 0xE3, 0x6F, 0x00, 0x5C, 0x13, 0x17, 0x00, 0x00, 0x0A, 0x70, 0x00, 0x5C, 0xE3, 0x8A, 0x01, 0x00, 0x1A, 0x21, 0x30, 0x84, 0xE3, 0x08, 0x40, 0x8D, 0xE2, 0x08, 0x20, 0xA0, 0xE3, 0x10, 0x00, 0xA0, 0xE3, 0x38, 0x10, 0x9D, 0xE5, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x00, 0x97, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x04, 0x20, 0x90, 0xE4, 0x00, 0x00, 0x87, 0xE5, 0x0C, 0x00, 0x8D, 0xE8, 0x08, 0x30, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x9B, 0xFE, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0x40, 0x85, 0xE2, 0x7E, 0x01, 0x00, 0xEA, 0x75, 0x00, 0x5C, 0xE3, 0x78, 0x00, 0x5C, 0x13, 0x74, 0x01, 0x00, 0x1A, 0x78, 0x00, 0x5C, 0xE3, 0x58, 0x00, 0x5C, 0x13, 0x04, 0x00, 0x00, 0x1A, 0x58, 0x00, 0x5C, 0xE3, 0x20, 0x40, 0x84, 0x03, 0x10, 0x00, 0xA0, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x07, 0x00, 0x00, 0xEA, 0x6F, 0x00, 0x5C, 0xE3, 0x08, 0x00, 0xA0, 0x03, 0x07, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x5C, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xC4, 0xE3, 0x69, 0x00, 0x5C, 0xE3, 0x64, 0x00, 0x5C, 0x13, 0x00, 0x00, 0x00, 0x0A, 0x0C, 0x40, 0xC4, 0xE3, 0x40, 0x0E, 0x14, 0xE3, 0x01, 0x40, 0xC4, 0x13, 0x69, 0x00, 0x5C, 0xE3, 0x64, 0x00, 0x5C, 0x13, 0x80, 0x1F, 0x04, 0xE2, 0x67, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x51, 0xE3, 0x30, 0x00, 0x00, 0x0A, 0x00, 0x20, 0x97, 0xE5, 0x08, 0x10, 0x82, 0xE2, 0x00, 0x10, 0x87, 0xE5, 0x02, 0x10, 0x92, 0xE8, 0x30, 0x10, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x28, 0x00, 0x8D, 0xE5, 0xBD, 0x0F, 0x8F, 0xE2, 0x2C, 0x10, 0x8D, 0xE5, 0x34, 0xC0, 0x8D, 0xE5, 0x0C, 0x00, 0x90, 0xE8, 0x30, 0x00, 0x9D, 0xE5, 0x02, 0x00, 0x50, 0xE0, 0x03, 0x10, 0xDC, 0xE0, 0x00, 0x00, 0xA0, 0xA3, 0x01, 0x00, 0xA0, 0xB3, 0x24, 0x00, 0x8D, 0xE5, 0xB3, 0x0F, 0x8F, 0xE2, 0x0C, 0x00, 0x90, 0xE8, 0x30, 0x00, 0x9D, 0xE5, 0x34, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE0, 0x01, 0x10, 0xD3, 0xE0, 0x30, 0x00, 0x9D, 0xB5, 0x34, 0xC0, 0x9D, 0xB5, 0x04, 0x00, 0x00, 0xBA, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x34, 0x10, 0x9D, 0xE5, 0x02, 0x00, 0x70, 0xE0, 0x00, 0xC0, 0xE1, 0xE2, 0x38, 0x10, 0x9D, 0xE5, 0x3C, 0x20, 0x9D, 0xE5, 0x14, 0x30, 0x8D, 0xE2, 0x16, 0x00, 0x83, 0xE8, 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5, 0x24, 0x30, 0x9D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x10, 0x20, 0x8D, 0xE5, 0x08, 0x30, 0x8D, 0xE5, 0x01, 0x10, 0x8D, 0xE8, 0x0A, 0x00, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x77, 0xFE, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x7C, 0x00, 0x00, 0xEA, 0x40, 0x0F, 0x14, 0xE3, 0x12, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x97, 0xE5, 0x08, 0xE0, 0x8D, 0xE2, 0x04, 0xC0, 0x91, 0xE4, 0x00, 0x10, 0x87, 0xE5, 0x38, 0x10, 0x9D, 0xE5, 0x3C, 0x20, 0x9D, 0xE5, 0x17, 0x00, 0x8E, 0xE8, 0x00, 0x00, 0x5C, 0xE3, 0x00, 0x20, 0x6C, 0xD2, 0x0C, 0x20, 0xA0, 0xC1, 0xAC, 0x3F, 0xA0, 0xE1, 0x0C, 0x00, 0x8D, 0xE8, 0x08, 0x30, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE1, 0x35, 0xFE, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x67, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x14, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x97, 0xE5, 0x04, 0x20, 0x91, 0xE4, 0x00, 0x10, 0x87, 0xE5, 0xFF, 0xC0, 0x02, 0xE2, 0x08, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x97, 0xE5, 0x80, 0x00, 0x14, 0xE3, 0x04, 0xC0, 0x91, 0x04, 0x00, 0x10, 0x87, 0x05, 0x03, 0x00, 0x00, 0x0A, 0x04, 0x20, 0x91, 0xE4, 0x00, 0x10, 0x87, 0xE5, 0x02, 0xC8, 0xA0, 0xE1, 0x4C, 0xC8, 0xA0, 0xE1, 0x38, 0x10, 0x9D, 0xE5, 0x3C, 0x20, 0x9D, 0xE5, 0x08, 0xE0, 0x8D, 0xE2, 0x17, 0x00, 0x8E, 0xE8, 0x00, 0x00, 0x5C, 0xE3, 0x00, 0x20, 0x6C, 0xD2, 0x0C, 0x20, 0xA0, 0xC1, 0xAC, 0x3F, 0xA0, 0xE1, 0x0C, 0x00, 0x8D, 0xE8, 0x08, 0x30, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE1, 0x15, 0xFE, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x47, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x16, 0x00, 0x00, 0x0A, 0x00, 0xC0, 0xA0, 0xE3, 0x38, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x14, 0x00, 0x8D, 0xE2, 0x10, 0xC0, 0x8D, 0xE5, 0x3C, 0x20, 0x9D, 0xE5, 0x16, 0x00, 0x80, 0xE8, 0x00, 0x30, 0xA0, 0xE3, 0x08, 0x30, 0x8D, 0xE5, 0x00, 0x00, 0x97, 0xE5, 0x08, 0x30, 0xA0, 0xE1, 0x08, 0x10, 0x80, 0xE2, 0x00, 0x10, 0x87, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x29, 0xFE, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x2E, 0x00, 0x00, 0xEA, 0x40, 0x0F, 0x14, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x38, 0x10, 0x9D, 0xE5, 0x3C, 0x20, 0x9D, 0xE5, 0x08, 0xC0, 0x8D, 0xE2, 0x17, 0x00, 0x8C, 0xE8, 0x00, 0x00, 0x97, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x04, 0x20, 0x90, 0xE4, 0x00, 0x00, 0x87, 0xE5, 0x0C, 0x00, 0x8D, 0xE8, 0x08, 0x30, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0xEA, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x1C, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x14, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x97, 0xE5, 0x04, 0x20, 0x91, 0xE4, 0x00, 0x10, 0x87, 0xE5, 0xFF, 0xC0, 0x02, 0xE2, 0x08, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x97, 0xE5, 0x80, 0x00, 0x14, 0xE3, 0x04, 0xC0, 0x91, 0x04, 0x00, 0x10, 0x87, 0x05, 0x03, 0x00, 0x00, 0x0A, 0x04, 0x20, 0x91, 0xE4, 0x00, 0x10, 0x87, 0xE5, 0x02, 0xC8, 0xA0, 0xE1, 0x2C, 0xC8, 0xA0, 0xE1, 0x00, 0x30, 0xA0, 0xE3, 0x04, 0x30, 0x8D, 0xE5, 0x38, 0x10, 0x9D, 0xE5, 0x3C, 0x20, 0x9D, 0xE5, 0x08, 0xE0, 0x8D, 0xE2, 0x17, 0x00, 0x8E, 0xE8, 0x00, 0xC0, 0x8D, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xCC, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0x40, 0x85, 0xE2, 0xAF, 0x00, 0x00, 0xEA, 0x46, 0x00, 0x5C, 0xE3, 0x38, 0x10, 0x9D, 0xE5, 0x20, 0x40, 0x84, 0x03, 0x3C, 0x20, 0x9D, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x16, 0x00, 0x80, 0xE8, 0x00, 0x00, 0x97, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x08, 0x10, 0x80, 0xE2, 0x00, 0x10, 0x87, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xD3, 0xFB, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0x40, 0x85, 0xE2, 0x9A, 0x00, 0x00, 0xEA, 0xF0, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xA0, 0xE3, 0x34, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x14, 0xE3, 0x10, 0x00, 0x00, 0x1A, 0x02, 0x10, 0xA0, 0xE3, 0x34, 0x10, 0x8D, 0xE5, 0x3C, 0x10, 0x9D, 0xE5, 0x01, 0x00, 0x51, 0xE3, 0x0B, 0x00, 0x00, 0x9A, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x20, 0x00, 0xA0, 0xE3, 0x3A, 0xFF, 0x2F, 0xE1, 0x34, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x34, 0x10, 0x8D, 0xE5, 0x3C, 0x10, 0x9D, 0xE5, 0x01, 0x00, 0x50, 0xE1, 0xF3, 0xFF, 0xFF, 0x3A, 0x00, 0x00, 0x97, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x04, 0x10, 0x90, 0xE4, 0x00, 0x00, 0x87, 0xE5, 0xFF, 0x00, 0x01, 0xE2, 0x0B, 0x10, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x3A, 0xFF, 0x2F, 0xE1, 0x02, 0x00, 0x14, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x34, 0x10, 0x9D, 0xE5, 0x3C, 0x00, 0x9D, 0xE5, 0x01, 0x40, 0x81, 0xE2, 0x00, 0x00, 0x51, 0xE1, 0x0A, 0x00, 0x00, 0x2A, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x20, 0x00, 0xA0, 0xE3, 0x3A, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x3C, 0x10, 0x9D, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x01, 0x00, 0x50, 0xE1, 0xF4, 0xFF, 0xFF, 0x3A, 0x01, 0x40, 0x85, 0xE2, 0x65, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x97, 0xE5, 0x04, 0x10, 0x90, 0xE4, 0x00, 0x00, 0x87, 0xE5, 0x38, 0x00, 0x9D, 0xE5, 0x34, 0x10, 0x8D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x10, 0xE0, 0x03, 0x38, 0x10, 0x9D, 0x15, 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x80, 0xE2, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x01, 0x10, 0x41, 0x12, 0x01, 0x00, 0x71, 0x13, 0xF9, 0xFF, 0xFF, 0x1A, 0x34, 0x10, 0x9D, 0xE5, 0x40, 0x0E, 0x14, 0xE3, 0x01, 0x10, 0x40, 0xE0, 0x30, 0x10, 0x8D, 0xE5, 0x05, 0x00, 0x00, 0x0A, 0x38, 0x00, 0x9D, 0xE5, 0x30, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x38, 0x10, 0x9D, 0x25, 0x30, 0x10, 0x9D, 0x35, 0x30, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x14, 0xE3, 0x1A, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x30, 0x10, 0x8D, 0xE5, 0x3C, 0x10, 0x9D, 0xE5, 0x01, 0x00, 0x50, 0xE1, 0x14, 0x00, 0x00, 0x2A, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x20, 0x00, 0xA0, 0xE3, 0x3A, 0xFF, 0x2F, 0xE1, 0x30, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x30, 0x10, 0x8D, 0xE5, 0x3C, 0x10, 0x9D, 0xE5, 0x01, 0x00, 0x50, 0xE1, 0xF3, 0xFF, 0xFF, 0x3A, 0x07, 0x00, 0x00, 0xEA, 0x34, 0x10, 0x9D, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x34, 0x10, 0x8D, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x3A, 0xFF, 0x2F, 0xE1, 0x34, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0xD1, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A, 0x40, 0x0E, 0x14, 0xE3, 0xF1, 0xFF, 0xFF, 0x0A, 0x38, 0x10, 0x9D, 0xE5, 0x01, 0x10, 0x41, 0xE2, 0x38, 0x10, 0x8D, 0xE5, 0x01, 0x00, 0x71, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A, 0x02, 0x00, 0x14, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x30, 0x10, 0x9D, 0xE5, 0x3C, 0x00, 0x9D, 0xE5, 0x01, 0x40, 0x81, 0xE2, 0x00, 0x00, 0x51, 0xE1, 0x0A, 0x00, 0x00, 0x2A, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x20, 0x00, 0xA0, 0xE3, 0x3A, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x3C, 0x10, 0x9D, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x01, 0x00, 0x50, 0xE1, 0xF4, 0xFF, 0xFF, 0x3A, 0x01, 0x40, 0x85, 0xE2, 0x0E, 0x00, 0x00, 0xEA, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x25, 0x00, 0xA0, 0xE3, 0x3A, 0xFF, 0x2F, 0xE1, 0x01, 0x40, 0x85, 0xE2, 0x06, 0x00, 0x00, 0xEA, 0x06, 0x20, 0xA0, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x0C, 0x00, 0xA0, 0xE1, 0x3A, 0xFF, 0x2F, 0xE1, 0x01, 0x40, 0x85, 0xE2, 0x00, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xDA, 0xFD, 0xFF, 0x1A, 0x08, 0x00, 0x56, 0xE1, 0x01, 0x20, 0x48, 0x22, 0x06, 0x20, 0xA0, 0x31, 0x08, 0x30, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x3A, 0xFF, 0x2F, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x40, 0xD0, 0x8D, 0xE2, 0xF0, 0x8D, 0xBD, 0xE8, 0x01, 0x20, 0x52, 0xE2, 0x06, 0x00, 0x00, 0x3A, 0xFF, 0x30, 0x01, 0xE2, 0x01, 0x10, 0xD0, 0xE4, 0x03, 0x00, 0x51, 0xE1, 0x01, 0x00, 0x40, 0x02, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x20, 0x52, 0xE2, 0xF9, 0xFF, 0xFF, 0x2A, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0x52, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x00, 0x30, 0xD0, 0xE5, 0x00, 0xC0, 0xD1, 0xE5, 0x0C, 0x30, 0x53, 0xE0, 0x03, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x80, 0xE2, 0x01, 0x10, 0x81, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0x03, 0x00, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x1E, 0xFF, 0x2F, 0x31, 0x01, 0xC0, 0xD1, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0x01, 0xC0, 0xC3, 0xE4, 0xFB, 0xFF, 0xFF, 0x2A, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x30, 0x42, 0xE2, 0x01, 0x00, 0x50, 0xE1, 0x07, 0x00, 0x00, 0x8A, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x00, 0x73, 0xE3, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0xC0, 0xD1, 0xE4, 0x01, 0x30, 0x53, 0xE2, 0x01, 0xC0, 0xC2, 0xE4, 0xFB, 0xFF, 0xFF, 0x2A, 0x1E, 0xFF, 0x2F, 0xE1, 0x02, 0xC0, 0x80, 0xE0, 0x02, 0x10, 0x81, 0xE0, 0x01, 0x00, 0x73, 0xE3, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x20, 0x71, 0xE5, 0x01, 0x30, 0x53, 0xE2, 0x01, 0x20, 0x6C, 0xE5, 0xFB, 0xFF, 0xFF, 0x2A, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x1E, 0xFF, 0x2F, 0x31, 0xFF, 0x30, 0x03, 0xE2, 0x01, 0x30, 0xC1, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0xFC, 0xFF, 0xFF, 0x2A, 0x1E, 0xFF, 0x2F, 0xE1, 0xFE, 0x45, 0x2D, 0xE9, 0x00, 0x60, 0xA0, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x09, 0xA0, 0xA0, 0xE1, 0x03, 0x80, 0xA0, 0xE1, 0x01, 0x70, 0xA0, 0xE1, 0x02, 0x50, 0xA0, 0xE1, 0x00, 0x40, 0xA0, 0xE3, 0xDA, 0xFA, 0xFF, 0xEB, 0xF0, 0x00, 0x9F, 0xE5, 0x09, 0x00, 0x57, 0xE3, 0x09, 0x00, 0x80, 0xE0, 0x07, 0xF1, 0x8F, 0x90, 0x35, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x1E, 0x00, 0x00, 0xEA, 0x31, 0x00, 0x00, 0xEA, 0x1E, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x22, 0x00, 0x00, 0xEA, 0x0C, 0x10, 0x96, 0xE5, 0x14, 0x10, 0x80, 0xE5, 0x02, 0xFC, 0xFF, 0xEB, 0xC1, 0x00, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0xDE, 0x02, 0x00, 0xEB, 0xA0, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x9C, 0x10, 0x9F, 0xE5, 0x01, 0x10, 0x8F, 0xE0, 0x08, 0x10, 0x11, 0xE5, 0x5C, 0x10, 0x91, 0xE5, 0x10, 0x10, 0x91, 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x1C, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x95, 0xE8, 0x50, 0x00, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x95, 0xE5, 0x08, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x4D, 0x00, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0x00, 0xEA, 0xB2, 0x03, 0x00, 0xEB, 0x02, 0x00, 0x00, 0xEA, 0xAF, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x00, 0xEA, 0xED, 0x02, 0x00, 0xEB, 0xC6, 0x02, 0x00, 0xEB, 0x0C, 0x00, 0x00, 0xEA, 0x1C, 0x80, 0x80, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x20, 0x50, 0x80, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0x00, 0xC0, 0x95, 0xE5, 0x00, 0x00, 0x5C, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x14, 0x20, 0x95, 0xE5, 0x18, 0x30, 0x95, 0xE5, 0x0C, 0x00, 0x8D, 0xE8, 0x0F, 0x00, 0x95, 0xE9, 0x3C, 0xFF, 0x2F, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x0A, 0x90, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0xFE, 0x85, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x24, 0x28, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0xFF, 0x0E, 0x40, 0x2D, 0xE9, 0xFF, 0x30, 0x02, 0xE2, 0xFF, 0x20, 0x01, 0xE2, 0xFF, 0x10, 0x00, 0xE2, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x0E, 0x00, 0x8D, 0xE8, 0x08, 0x00, 0x10, 0xE5, 0x74, 0x11, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x38, 0xA0, 0xE1, 0x70, 0x11, 0x90, 0xE5, 0x43, 0x38, 0xA0, 0xE1, 0x00, 0x10, 0x91, 0xE5, 0xE8, 0xC1, 0x90, 0xE5, 0x01, 0x28, 0xA0, 0xE1, 0x42, 0x28, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0xA0, 0xE3, 0x3C, 0xFF, 0x2F, 0xE1, 0x0E, 0x80, 0xBD, 0xE8, 0x98, 0xE2, 0xFF, 0xFF, 0x0C, 0x10, 0x9F, 0xE5, 0x01, 0x10, 0x8F, 0xE0, 0x08, 0x10, 0x11, 0xE5, 0xA4, 0x10, 0x91, 0xE5, 0x11, 0xFF, 0x2F, 0xE1, 0x50, 0xE2, 0xFF, 0xFF, 0x7F, 0x40, 0x2D, 0xE9, 0x03, 0x60, 0xA0, 0xE1, 0x20, 0x30, 0x8D, 0xE2, 0x00, 0xE0, 0xA0, 0xE1, 0x02, 0x50, 0xA0, 0xE1, 0x01, 0x40, 0xA0, 0xE1, 0x0F, 0x00, 0x93, 0xE8, 0x0F, 0x00, 0x8D, 0xE8, 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x00, 0x10, 0xE5, 0x06, 0x30, 0xA0, 0xE1, 0xEC, 0xC1, 0x90, 0xE5, 0x0E, 0x00, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1, 0x3C, 0xFF, 0x2F, 0xE1, 0x10, 0xD0, 0x8D, 0xE2, 0x70, 0x80, 0xBD, 0xE8, 0x18, 0xE2, 0xFF, 0xFF, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0xFE, 0x45, 0x2D, 0xE9, 0x00, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x09, 0xA0, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1, 0x03, 0x70, 0xA0, 0xE1, 0x02, 0x60, 0xA0, 0xE1, 0x00, 0x40, 0xA0, 0xE3, 0x5C, 0xFA, 0xFF, 0xEB, 0xCC, 0x00, 0x9F, 0xE5, 0x0A, 0x00, 0x58, 0xE3, 0x09, 0x00, 0x80, 0xE0, 0x08, 0xF1, 0x8F, 0x90, 0x2C, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x0D, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x19, 0x00, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x0C, 0x10, 0x95, 0xE5, 0x14, 0x10, 0x80, 0xE5, 0x83, 0xFB, 0xFF, 0xEB, 0x42, 0x00, 0x00, 0xEB, 0x1B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x96, 0xE8, 0xDB, 0xFF, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x96, 0xE5, 0x08, 0x00, 0x50, 0xE3, 0x16, 0x00, 0x00, 0x1A, 0xD8, 0xFF, 0xFF, 0xEB, 0x13, 0x00, 0x00, 0xEA, 0x3E, 0x03, 0x00, 0xEB, 0x12, 0x00, 0x00, 0xEA, 0x0C, 0x70, 0x85, 0xE5, 0x10, 0x00, 0x00, 0xEA, 0x39, 0x02, 0x00, 0xEB, 0x0E, 0x00, 0x00, 0xEA, 0x77, 0x02, 0x00, 0xEB, 0x0C, 0x00, 0x00, 0xEA, 0x1C, 0x70, 0x80, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x20, 0x60, 0x80, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0x00, 0xC0, 0x96, 0xE5, 0x00, 0x00, 0x5C, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x14, 0x20, 0x96, 0xE5, 0x18, 0x30, 0x96, 0xE5, 0x0C, 0x00, 0x8D, 0xE8, 0x0F, 0x00, 0x96, 0xE9, 0x3C, 0xFF, 0x2F, 0xE1, 0x00, 0x40, 0xA0, 0xE1, 0x0A, 0x90, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0xFE, 0x85, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x28, 0x10, 0x9F, 0xE5, 0x08, 0x40, 0x2D, 0xE9, 0x01, 0x10, 0x8F, 0xE0, 0x04, 0x10, 0x11, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x91, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x24, 0x30, 0x91, 0xE5, 0x28, 0xC0, 0x91, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0x2F, 0xE1, 0x08, 0x80, 0xBD, 0xE8, 0xD8, 0xE0, 0xFF, 0xFF, 0x2C, 0x00, 0x9F, 0xE5, 0x08, 0x40, 0x2D, 0xE9, 0x00, 0x00, 0x8F, 0xE0, 0x04, 0x00, 0x10, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x30, 0x8D, 0xE5, 0x0C, 0x10, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x24, 0x30, 0x91, 0xE5, 0x28, 0xC0, 0x91, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0x2F, 0xE1, 0x08, 0x80, 0xBD, 0xE8, 0xA4, 0xE0, 0xFF, 0xFF, 0x0C, 0x10, 0x9F, 0xE5, 0x01, 0x10, 0x8F, 0xE0, 0x08, 0x10, 0x11, 0xE5, 0x40, 0x11, 0x91, 0xE5, 0x11, 0xFF, 0x2F, 0xE1, 0x70, 0xE0, 0xFF, 0xFF, 0xF0, 0x45, 0x2D, 0xE9, 0xF8, 0x46, 0x9F, 0xE5, 0x41, 0xDF, 0x4D, 0xE2, 0x04, 0x40, 0x8F, 0xE0, 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0xA0, 0xE3, 0x63, 0xFF, 0xFF, 0xEB, 0xFF, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0x0E, 0x00, 0x8D, 0xE9, 0xFF, 0x30, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0xA0, 0xE1, 0x76, 0xFF, 0xFF, 0xEB, 0x50, 0x3F, 0xA0, 0xE3, 0xF0, 0x20, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0xA0, 0xE3, 0xF0, 0x01, 0x00, 0xEB, 0x0A, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0xA0, 0xE1, 0xE5, 0x01, 0x00, 0xEB, 0x9C, 0x16, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x04, 0x50, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0x7A, 0x03, 0x00, 0xEB, 0x84, 0x66, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x09, 0x60, 0x86, 0xE0, 0x00, 0x10, 0x96, 0xE5, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x56, 0x03, 0x00, 0xEB, 0x64, 0x16, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x6C, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x4A, 0x03, 0x00, 0xEB, 0x38, 0x16, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x60, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x3E, 0x03, 0x00, 0xEB, 0x0C, 0x16, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x54, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x32, 0x03, 0x00, 0xEB, 0xE0, 0x15, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x48, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x26, 0x03, 0x00, 0xEB, 0xB4, 0x15, 0x9F, 0xE5, 0x08, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x3C, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x1A, 0x03, 0x00, 0xEB, 0x88, 0x15, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x30, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x0E, 0x03, 0x00, 0xEB, 0x5C, 0x15, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x24, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x02, 0x03, 0x00, 0xEB, 0x30, 0x15, 0x9F, 0xE5, 0x08, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x18, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xF6, 0x02, 0x00, 0xEB, 0x04, 0x75, 0x9F, 0xE5, 0x07, 0x70, 0x8F, 0xE0, 0x00, 0x15, 0x9F, 0xE5, 0x07, 0x30, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x09, 0x03, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xE7, 0x02, 0x00, 0xEB, 0xD0, 0x24, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0xC8, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xF9, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xD7, 0x02, 0x00, 0xEB, 0x98, 0x24, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x90, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xE9, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xC7, 0x02, 0x00, 0xEB, 0x60, 0x24, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x58, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xD9, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xB7, 0x02, 0x00, 0xEB, 0x28, 0x24, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x20, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xC9, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xA7, 0x02, 0x00, 0xEB, 0xF0, 0x23, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0xE8, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xB9, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x97, 0x02, 0x00, 0xEB, 0xB8, 0x23, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0xB0, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xA9, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x87, 0x02, 0x00, 0xEB, 0x80, 0x23, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x78, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x99, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x77, 0x02, 0x00, 0xEB, 0x48, 0x23, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x40, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x89, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x67, 0x02, 0x00, 0xEB, 0x10, 0x23, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x08, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x79, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x57, 0x02, 0x00, 0xEB, 0xD8, 0x22, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0xD0, 0x12, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x69, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x47, 0x02, 0x00, 0xEB, 0xA0, 0x22, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x98, 0x12, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x59, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x37, 0x02, 0x00, 0xEB, 0x68, 0x22, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x60, 0x12, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x49, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x27, 0x02, 0x00, 0xEB, 0x30, 0x22, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x28, 0x12, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x39, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x17, 0x02, 0x00, 0xEB, 0xF8, 0x21, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0xF0, 0x11, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x29, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x07, 0x02, 0x00, 0xEB, 0xC0, 0x21, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0xB8, 0x11, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x19, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xF7, 0x01, 0x00, 0xEB, 0x88, 0x21, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x07, 0x00, 0x42, 0xE0, 0x80, 0x11, 0x9F, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0x09, 0x02, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xE7, 0x01, 0x00, 0xEB, 0x55, 0x0F, 0x8F, 0xE2, 0x4C, 0x71, 0x9F, 0xE5, 0x00, 0x05, 0x90, 0xE8, 0x80, 0x08, 0x87, 0xE2, 0x54, 0x06, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1, 0x44, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xF7, 0x01, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xD5, 0x01, 0x00, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0x45, 0x06, 0x00, 0xEB, 0x0A, 0x30, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0xAA, 0x04, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x10, 0x8F, 0xE0, 0x05, 0x00, 0xA0, 0xE1, 0xE5, 0x01, 0x00, 0xEB, 0x00, 0x10, 0x96, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0xC3, 0x01, 0x00, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xC3, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x41, 0xDF, 0x8D, 0xE2, 0xF0, 0x85, 0xBD, 0xE8, 0xB8, 0x23, 0x00, 0x00, 0x40, 0x23, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0xF0, 0x22, 0x00, 0x00, 0xAC, 0x22, 0x00, 0x00, 0x68, 0x22, 0x00, 0x00, 0x20, 0x22, 0x00, 0x00, 0xD8, 0x21, 0x00, 0x00, 0x94, 0x21, 0x00, 0x00, 0x50, 0x21, 0x00, 0x00, 0x0C, 0x21, 0x00, 0x00, 0x34, 0xDE, 0xFF, 0xFF, 0xAC, 0x20, 0x00, 0x00, 0xAC, 0x0B, 0x00, 0x00, 0x4C, 0x20, 0x00, 0x00, 0xC0, 0x0B, 0x00, 0x00, 0xE8, 0x1F, 0x00, 0x00, 0x6C, 0x0B, 0x00, 0x00, 0x84, 0x1F, 0x00, 0x00, 0xC8, 0xF8, 0xFF, 0xFF, 0x24, 0x1F, 0x00, 0x00, 0xA8, 0xF8, 0xFF, 0xFF, 0xC0, 0x1E, 0x00, 0x00, 0x64, 0x0B, 0x00, 0x00, 0x60, 0x1E, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0xFC, 0x1D, 0x00, 0x00, 0x80, 0x0A, 0x00, 0x00, 0xA8, 0x20, 0x00, 0x00, 0xDC, 0x0A, 0x00, 0x00, 0x44, 0x20, 0x00, 0x00, 0x14, 0xF7, 0xFF, 0xFF, 0xE4, 0x1F, 0x00, 0x00, 0xF4, 0x09, 0x00, 0x00, 0x84, 0x1F, 0x00, 0x00, 0x78, 0x0A, 0x00, 0x00, 0x20, 0x1F, 0x00, 0x00, 0x28, 0xF6, 0xFF, 0xFF, 0xC0, 0x1E, 0x00, 0x00, 0xB8, 0xF6, 0xFF, 0xFF, 0x60, 0x1E, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x09, 0x00, 0x00, 0xA0, 0x1D, 0x00, 0x00, 0xC3, 0xF5, 0x48, 0x40, 0xB8, 0x1E, 0x85, 0xEB, 0x51, 0xB8, 0x00, 0x40, 0x50, 0x1D, 0x00, 0x00, 0x08, 0x1D, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x1C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x00, 0x10, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x04, 0x00, 0x84, 0xE2, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x40, 0x80, 0x14, 0x10, 0x80, 0xBD, 0xE8, 0x84, 0xD8, 0xFF, 0xFF, 0x0C, 0x20, 0x9F, 0xE5, 0x02, 0x20, 0x8F, 0xE0, 0x08, 0x20, 0x12, 0xE5, 0xA0, 0x20, 0x92, 0xE5, 0x12, 0xFF, 0x2F, 0xE1, 0x5C, 0xD8, 0xFF, 0xFF, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0xF8, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x48, 0x00, 0x9F, 0xE5, 0x03, 0x70, 0xA0, 0xE1, 0x09, 0x00, 0x80, 0xE0, 0x84, 0x00, 0x90, 0xE5, 0x02, 0x60, 0xA0, 0xE1, 0x01, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x30, 0xFF, 0x2F, 0x11, 0x2C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x00, 0x70, 0x8D, 0xE5, 0x08, 0x10, 0x10, 0xE5, 0x06, 0x30, 0xA0, 0xE1, 0x6C, 0x01, 0x91, 0xE5, 0x05, 0x20, 0xA0, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x74, 0xC0, 0x91, 0xE5, 0x04, 0x10, 0xA0, 0xE1, 0x3C, 0xFF, 0x2F, 0xE1, 0xF8, 0x80, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x14, 0xD8, 0xFF, 0xFF, 0x1F, 0x40, 0x2D, 0xE9, 0x84, 0x40, 0x9F, 0xE5, 0x09, 0x40, 0x84, 0xE0, 0x74, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x8D, 0xE2, 0xD2, 0xFD, 0xFF, 0xEB, 0x04, 0x00, 0x9D, 0xE5, 0x7C, 0x00, 0x84, 0xE5, 0x08, 0x00, 0x9D, 0xE5, 0x80, 0x00, 0x84, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0x74, 0x00, 0x84, 0xE5, 0x78, 0x00, 0x94, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x0F, 0x00, 0x00, 0x1A, 0x80, 0x00, 0x94, 0xE5, 0x00, 0x38, 0xA0, 0xE1, 0x40, 0x00, 0x9F, 0xE5, 0x23, 0x38, 0xA0, 0xE1, 0x00, 0x00, 0x8F, 0xE0, 0x00, 0x30, 0x8D, 0xE5, 0x08, 0x10, 0x10, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x6C, 0x01, 0x91, 0xE5, 0x74, 0xC0, 0x91, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x7C, 0x10, 0x94, 0xE5, 0x01, 0x38, 0xA0, 0xE1, 0x23, 0x38, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x3C, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x78, 0x00, 0x84, 0xE5, 0x1F, 0x80, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x8C, 0xD7, 0xFF, 0xFF, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x14, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x09, 0x10, 0x81, 0xE0, 0x88, 0x00, 0x81, 0xE5, 0x90, 0x00, 0x81, 0xE5, 0x8C, 0x00, 0x81, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x2C, 0x40, 0x9F, 0xE5, 0x09, 0x40, 0x84, 0xE0, 0x90, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x10, 0x80, 0xBD, 0x08, 0x1C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x00, 0x10, 0xE5, 0x84, 0x00, 0x90, 0xE5, 0x30, 0xFF, 0x2F, 0xE1, 0x90, 0x10, 0x94, 0xE5, 0x00, 0x00, 0x41, 0xE0, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x04, 0xD7, 0xFF, 0xFF, 0x00, 0x10, 0xB0, 0xE1, 0x1E, 0xFF, 0x2F, 0x01, 0x94, 0x30, 0x9F, 0xE5, 0x09, 0x30, 0x83, 0xE0, 0x88, 0x20, 0x93, 0xE5, 0x01, 0x00, 0x52, 0xE1, 0x18, 0x00, 0x91, 0x05, 0x88, 0x00, 0x83, 0x05, 0x0C, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x18, 0x00, 0x92, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x50, 0xE1, 0x00, 0x20, 0xA0, 0x11, 0x02, 0x00, 0x00, 0x1A, 0x18, 0x00, 0x90, 0xE5, 0x18, 0x00, 0x82, 0xE5, 0x02, 0x00, 0x00, 0xEA, 0x18, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x8C, 0x20, 0x93, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x00, 0x52, 0xE1, 0x1C, 0x00, 0x92, 0x05, 0x8C, 0x00, 0x83, 0x05, 0x1E, 0xFF, 0x2F, 0x01, 0x1C, 0x00, 0x92, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x50, 0xE1, 0x00, 0x20, 0xA0, 0x11, 0x02, 0x00, 0x00, 0x1A, 0x1C, 0x00, 0x90, 0xE5, 0x1C, 0x00, 0x82, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x1C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x00, 0x00, 0xF0, 0x41, 0x2D, 0xE9, 0x00, 0x80, 0xA0, 0xE1, 0x00, 0x40, 0xB0, 0xE1, 0x88, 0x01, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x84, 0xE1, 0x9F, 0xE5, 0x0E, 0xE0, 0x8F, 0xE0, 0x18, 0xC0, 0x9D, 0xE5, 0x08, 0xE0, 0x1E, 0xE5, 0x03, 0x00, 0x00, 0x1A, 0x68, 0x20, 0x9E, 0xE5, 0xFA, 0x1F, 0xA0, 0xE3, 0x32, 0xFF, 0x2F, 0xE1, 0x18, 0x00, 0x00, 0xEA, 0x5C, 0x50, 0x9E, 0xE5, 0x08, 0x50, 0x95, 0xE5, 0x00, 0x50, 0x95, 0xE5, 0x03, 0x00, 0x55, 0xE3, 0x04, 0x00, 0x55, 0x13, 0x12, 0x00, 0x00, 0x0A, 0x00, 0x50, 0x94, 0xE5, 0x48, 0x61, 0x9F, 0xE5, 0x06, 0x00, 0x55, 0xE1, 0x03, 0x00, 0x00, 0x0A, 0x68, 0x20, 0x9E, 0xE5, 0x3C, 0x11, 0x9F, 0xE5, 0x32, 0xFF, 0x2F, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x04, 0x10, 0x84, 0x15, 0x10, 0x20, 0x84, 0xE5, 0x00, 0x60, 0xA0, 0xE3, 0x08, 0x60, 0x84, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x0C, 0x30, 0x84, 0x15, 0x14, 0xC0, 0x84, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0xCA, 0x00, 0x00, 0xE0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8, 0x0A, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0xB3, 0x04, 0x00, 0x84, 0xB5, 0x04, 0x00, 0x94, 0xE5, 0x08, 0x00, 0x84, 0xE5, 0x96, 0xFF, 0xFF, 0xEB, 0xE8, 0x70, 0x9F, 0xE5, 0x00, 0x50, 0xA0, 0xE1, 0x09, 0x70, 0x87, 0xE0, 0x88, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x00, 0x50, 0xA0, 0xB3, 0x05, 0x10, 0x80, 0xE2, 0x05, 0x00, 0x51, 0xE1, 0x00, 0x50, 0xA0, 0xB1, 0x08, 0x00, 0xA0, 0xE1, 0x98, 0xFF, 0xFF, 0xEB, 0x88, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x94, 0xE5, 0x05, 0x00, 0x50, 0xE1, 0x05, 0x00, 0x40, 0xA0, 0x08, 0x00, 0x84, 0xA5, 0x09, 0x00, 0x00, 0xAA, 0x08, 0x00, 0x94, 0xE5, 0x08, 0x60, 0x84, 0xE5, 0x00, 0x20, 0x45, 0xE0, 0x00, 0x00, 0x51, 0xE3, 0x08, 0x30, 0x91, 0x15, 0x02, 0x30, 0x83, 0x10, 0x08, 0x30, 0x81, 0x15, 0x18, 0x10, 0x91, 0x15, 0xF9, 0xFF, 0xFF, 0x1A, 0x1C, 0x00, 0x00, 0xEB, 0x88, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x88, 0x80, 0x87, 0x05, 0x18, 0x60, 0x88, 0x05, 0x10, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x98, 0xE5, 0x08, 0x20, 0x90, 0xE5, 0x02, 0x00, 0x51, 0xE1, 0x18, 0x00, 0x88, 0xB5, 0x88, 0x80, 0x87, 0xB5, 0x0A, 0x00, 0x00, 0xBA, 0x18, 0x20, 0x90, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xA0, 0xE1, 0xFB, 0xFF, 0xFF, 0xEA, 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x08, 0x30, 0x92, 0xE5, 0x03, 0x00, 0x51, 0xE1, 0xF8, 0xFF, 0xFF, 0xAA, 0x18, 0x80, 0x80, 0xE5, 0x18, 0x20, 0x88, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8, 0xE4, 0x1A, 0x00, 0x00, 0x20, 0xD6, 0xFF, 0xFF, 0xCF, 0xBC, 0xAB, 0x79, 0xE9, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x2C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x00, 0x10, 0xE5, 0x84, 0x00, 0x90, 0xE5, 0x30, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x80, 0xE0, 0x18, 0x10, 0x9F, 0xE5, 0x09, 0x10, 0x81, 0xE0, 0x90, 0x00, 0x81, 0xE5, 0x73, 0x00, 0x00, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x5F, 0x00, 0x00, 0xEA, 0x7C, 0xD4, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x64, 0x01, 0x9F, 0xE5, 0x7C, 0x40, 0x2D, 0xE9, 0x00, 0x00, 0x8F, 0xE0, 0x08, 0x00, 0x10, 0xE5, 0x84, 0x00, 0x90, 0xE5, 0x30, 0xFF, 0x2F, 0xE1, 0x00, 0x50, 0xA0, 0xE3, 0x4C, 0x61, 0x9F, 0xE5, 0x09, 0x60, 0x86, 0xE0, 0x90, 0x10, 0x96, 0xE5, 0x90, 0x50, 0x86, 0xE5, 0x01, 0x00, 0x40, 0xE0, 0x88, 0x10, 0x96, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x49, 0x00, 0x00, 0x0A, 0x08, 0x30, 0x91, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x00, 0x40, 0xA0, 0x13, 0x19, 0x00, 0x00, 0x1A, 0x00, 0xC0, 0xE0, 0xE3, 0x08, 0xC0, 0x81, 0xE5, 0x18, 0x30, 0x91, 0xE5, 0x32, 0x00, 0x52, 0xE3, 0x32, 0x20, 0xA0, 0xB3, 0x01, 0x40, 0xA0, 0xE1, 0x88, 0x30, 0x86, 0xE5, 0x08, 0x00, 0x00, 0xBA, 0x7D, 0x0E, 0x52, 0xE3, 0x7D, 0x2E, 0xA0, 0xC3, 0x05, 0x00, 0x00, 0xEA, 0x08, 0xC0, 0x83, 0xE5, 0x18, 0x30, 0x91, 0xE5, 0x1C, 0x30, 0x81, 0xE5, 0x18, 0x10, 0x93, 0xE5, 0x88, 0x10, 0x86, 0xE5, 0x03, 0x10, 0xA0, 0xE1, 0x18, 0x30, 0x91, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x08, 0xE0, 0x93, 0x15, 0x02, 0x00, 0x5E, 0x11, 0xF4, 0xFF, 0xFF, 0xBA, 0x1C, 0x50, 0x81, 0xE5, 0x88, 0x10, 0x96, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x26, 0x00, 0x00, 0x0A, 0x88, 0x10, 0x96, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x20, 0x91, 0xE5, 0x00, 0x00, 0xA0, 0xB3, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x20, 0xA0, 0xB3, 0x08, 0x50, 0x81, 0xB5, 0x02, 0x00, 0x00, 0xBA, 0xFF, 0xCC, 0x52, 0xE2, 0xFF, 0xC0, 0x5C, 0xA2, 0x8C, 0x20, 0x9F, 0xC5, 0x08, 0x30, 0x91, 0xE5, 0x02, 0x30, 0x43, 0xE0, 0x08, 0x30, 0x81, 0xE5, 0x18, 0x10, 0x91, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x42, 0xE0, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0xD3, 0xAB, 0xFF, 0xFF, 0xEB, 0x10, 0x00, 0x00, 0xEA, 0x08, 0x50, 0x84, 0xE5, 0x1C, 0x00, 0x94, 0xE5, 0x8C, 0x00, 0x86, 0xE5, 0x14, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x8D, 0xE5, 0x10, 0x20, 0x94, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x32, 0xFF, 0xFF, 0xEB, 0x0C, 0x10, 0x94, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x94, 0x15, 0x31, 0xFF, 0x2F, 0x11, 0x8C, 0x40, 0x96, 0xE5, 0x00, 0x00, 0x54, 0xE3, 0x08, 0x00, 0x94, 0x15, 0x00, 0x00, 0x50, 0x13, 0xEA, 0xFF, 0xFF, 0xBA, 0x8C, 0x50, 0x86, 0xE5, 0x7C, 0x80, 0xBD, 0xE8, 0x3C, 0xD4, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x34, 0x40, 0x9F, 0xE5, 0x04, 0x40, 0x8F, 0xE0, 0x08, 0x10, 0x14, 0xE5, 0x00, 0x08, 0xA0, 0xE1, 0x7C, 0x10, 0x91, 0xE5, 0x20, 0x08, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x10, 0x14, 0x05, 0x01, 0x00, 0xA0, 0x03, 0x5C, 0x10, 0x91, 0x05, 0x14, 0x10, 0x91, 0x05, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0xE8, 0xC4, 0xD2, 0xFF, 0xFF, 0x20, 0x20, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x02, 0x20, 0x8F, 0xE0, 0x08, 0x10, 0x12, 0xE5, 0x5C, 0x10, 0x91, 0xE5, 0x14, 0x10, 0x91, 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x08, 0x00, 0x12, 0xE5, 0x80, 0x00, 0x90, 0xE5, 0x10, 0xFF, 0x2F, 0xE1, 0x80, 0xD2, 0xFF, 0xFF, 0x0C, 0x30, 0x9F, 0xE5, 0x03, 0x30, 0x8F, 0xE0, 0x08, 0x30, 0x13, 0xE5, 0xAC, 0x30, 0x93, 0xE5, 0x13, 0xFF, 0x2F, 0xE1, 0x58, 0xD2, 0xFF, 0xFF, 0x0F, 0x00, 0x2D, 0xE9, 0x04, 0xE0, 0x2D, 0xE5, 0x0C, 0xD0, 0x4D, 0xE2, 0x14, 0x00, 0x8D, 0xE2, 0x08, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x9F, 0xE5, 0x08, 0x30, 0x8D, 0xE2, 0x00, 0x30, 0x8D, 0xE5, 0x10, 0x30, 0x9D, 0xE5, 0x04, 0x10, 0x8D, 0xE2, 0x00, 0x20, 0xE0, 0xE3, 0x00, 0x00, 0x8F, 0xE0, 0x15, 0xF9, 0xFF, 0xEB, 0x0C, 0xD0, 0x8D, 0xE2, 0x14, 0xF0, 0x9D, 0xE4, 0x54, 0xE3, 0xFF, 0xFF, 0x08, 0x10, 0x9F, 0xE5, 0x09, 0x10, 0x81, 0xE0, 0x00, 0x00, 0x81, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x2D, 0xE9, 0x04, 0xE0, 0x2D, 0xE5, 0x0C, 0xD0, 0x4D, 0xE2, 0x18, 0x10, 0x8D, 0xE2, 0x08, 0x10, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE1, 0x1C, 0x00, 0x9F, 0xE5, 0x08, 0x30, 0x8D, 0xE2, 0x00, 0x30, 0x8D, 0xE5, 0x00, 0x20, 0xE0, 0xE3, 0x00, 0x00, 0x8F, 0xE0, 0x14, 0x30, 0x9D, 0xE5, 0x00, 0xF9, 0xFF, 0xEB, 0x0C, 0xD0, 0x8D, 0xE2, 0x14, 0xF0, 0x9D, 0xE4, 0xF8, 0xE2, 0xFF, 0xFF, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x01, 0x20, 0xF0, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x01, 0x20, 0xD1, 0xE4, 0x01, 0x20, 0xC0, 0xE4, 0x00, 0x00, 0x52, 0xE3, 0xFB, 0xFF, 0xFF, 0x1A, 0x03, 0x00, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x20, 0xD0, 0xE4, 0x01, 0x30, 0xD1, 0xE4, 0x03, 0x00, 0x52, 0xE1, 0x03, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x52, 0xE1, 0x01, 0x00, 0xA0, 0x23, 0x00, 0x00, 0xE0, 0x33, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0xF5, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x20, 0xD1, 0xE4, 0x01, 0x20, 0xC0, 0xE4, 0x00, 0x00, 0x52, 0xE3, 0xFB, 0xFF, 0xFF, 0x1A, 0x03, 0x00, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x00, 0x20, 0xD1, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x01, 0x10, 0x81, 0x12, 0xFB, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x41, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0xC0, 0xA0, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x00, 0x30, 0xD0, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xF0, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x01, 0x30, 0xD1, 0xE4, 0x01, 0x30, 0xC0, 0xE4, 0x00, 0x00, 0x53, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x01, 0x20, 0x52, 0xE2, 0x00, 0x10, 0xA0, 0x03, 0x00, 0x10, 0xC0, 0x05, 0x03, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xD1, 0xE4, 0x01, 0x30, 0xC0, 0xE4, 0x00, 0x00, 0x53, 0xE3, 0xF7, 0xFF, 0xFF, 0x1A, 0x0C, 0x00, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xD0, 0xE4, 0x01, 0xC0, 0xD1, 0xE4, 0x0C, 0x00, 0x53, 0xE1, 0x03, 0x00, 0x00, 0x0A, 0x0C, 0x00, 0x53, 0xE1, 0x01, 0x00, 0xA0, 0x23, 0x00, 0x00, 0xE0, 0x33, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x20, 0x52, 0x12, 0xF4, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0xC0, 0xD1, 0xE5, 0x00, 0x00, 0x5C, 0xE3, 0x01, 0x10, 0x81, 0x12, 0x00, 0xC0, 0xC3, 0xE5, 0x01, 0x30, 0x83, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF8, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1, 0x70, 0x40, 0x2D, 0xE9, 0x01, 0x20, 0xA0, 0xE1, 0x00, 0x30, 0xD2, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x20, 0x82, 0x12, 0xFB, 0xFF, 0xFF, 0x1A, 0x01, 0x60, 0x52, 0xE0, 0x70, 0x80, 0xBD, 0x08, 0x00, 0x20, 0xA0, 0xE1, 0x00, 0x30, 0xD2, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x20, 0x82, 0x12, 0xFB, 0xFF, 0xFF, 0x1A, 0x00, 0xE0, 0x42, 0xE0, 0x06, 0x00, 0x5E, 0xE1, 0x13, 0x00, 0x00, 0x3A, 0x01, 0xE0, 0x4E, 0xE2, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x40, 0xA0, 0xE3, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0xC0, 0xA0, 0xE1, 0x00, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x00, 0x40, 0xD3, 0xE5, 0x00, 0x50, 0xDC, 0xE5, 0x05, 0x40, 0x54, 0xE0, 0x03, 0x00, 0x00, 0x1A, 0x01, 0x30, 0x83, 0xE2, 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x70, 0x80, 0xBD, 0x08, 0x01, 0x00, 0x80, 0xE2, 0x06, 0x00, 0x5E, 0xE1, 0xEB, 0xFF, 0xFF, 0x2A, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x80, 0xBD, 0xE8, 0x78, 0x47, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x8C, 0xC4, 0x9F, 0xE5, 0x81, 0x40, 0xDC, 0xE1, 0x83, 0x40, 0xDC, 0x11, 0x59, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x31, 0xE1, 0x80, 0x34, 0x23, 0x42, 0x8D, 0x00, 0x00, 0x4A, 0x02, 0x40, 0x50, 0xE0, 0x03, 0xE0, 0xD1, 0xE0, 0x03, 0x00, 0x00, 0x2A, 0x04, 0x20, 0x92, 0xE0, 0x0E, 0x30, 0xA3, 0xE0, 0x04, 0x00, 0x50, 0xE0, 0x0E, 0x10, 0xC1, 0xE0, 0x21, 0x4A, 0xA0, 0xE1, 0x23, 0xEA, 0x44, 0xE0, 0x83, 0x00, 0x1C, 0xE1, 0x38, 0x00, 0x00, 0x0A, 0x04, 0x1A, 0xC1, 0xE1, 0x0C, 0x30, 0xC3, 0xE1, 0x40, 0x39, 0x83, 0xE3, 0x20, 0xC0, 0x7E, 0xE2, 0x15, 0x00, 0x00, 0x3A, 0x32, 0x0E, 0x90, 0xE0, 0x33, 0x1E, 0xA1, 0xE0, 0x13, 0x0C, 0x90, 0xE0, 0x00, 0x10, 0xB1, 0xE2, 0x40, 0x09, 0x51, 0xE3, 0x19, 0x00, 0x00, 0x2A, 0x04, 0x1A, 0x81, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0x12, 0x2C, 0xB0, 0xE1, 0x1E, 0xFF, 0x2F, 0x51, 0x01, 0x00, 0x90, 0xE2, 0x82, 0x20, 0xB0, 0x31, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xC0, 0x13, 0x00, 0x10, 0xA1, 0x02, 0x81, 0x30, 0xA0, 0xE1, 0x80, 0x09, 0x73, 0xE3, 0x1E, 0xFF, 0x2F, 0x31, 0xE8, 0xC3, 0x9F, 0xE5, 0x60, 0x14, 0x41, 0x22, 0x3F, 0x03, 0x00, 0xEA, 0x01, 0x00, 0x52, 0xE3, 0x03, 0x20, 0xA3, 0xE0, 0x20, 0xE0, 0x4E, 0xE2, 0x1F, 0xC0, 0x7E, 0xE2, 0x00, 0xC0, 0xA0, 0x33, 0x33, 0x0E, 0x90, 0x20, 0x04, 0x1A, 0xA1, 0xE0, 0x21, 0x0A, 0x54, 0xE1, 0xE7, 0xFF, 0xFF, 0x0A, 0x04, 0x1A, 0x41, 0xE0, 0x40, 0x19, 0x81, 0xE2, 0xA1, 0x10, 0xB0, 0xE1, 0x04, 0x1A, 0x81, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0x60, 0x00, 0xB0, 0xE1, 0x07, 0x00, 0x00, 0x3A, 0x00, 0x00, 0xB0, 0xE2, 0x12, 0xCC, 0xB0, 0x31, 0x04, 0x00, 0x00, 0x1A, 0xE2, 0xFF, 0xFF, 0xEA, 0x01, 0x00, 0x90, 0xE2, 0x82, 0x20, 0xB0, 0x31, 0xE2, 0xFF, 0xFF, 0x1A, 0xDE, 0xFF, 0xFF, 0xEA, 0x81, 0x30, 0xA0, 0xE1, 0x80, 0x09, 0x73, 0xE3, 0x1E, 0xFF, 0x2F, 0x31, 0x70, 0xC3, 0x9F, 0xE5, 0x60, 0x14, 0x41, 0xE2, 0x21, 0x03, 0x00, 0xEA, 0x83, 0xC0, 0x92, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x84, 0xCA, 0xB0, 0xE1, 0x04, 0x1A, 0xC1, 0xE1, 0x80, 0x34, 0xC3, 0x13, 0x01, 0xE0, 0x4E, 0x12, 0xC2, 0xFF, 0xFF, 0x1A, 0x10, 0x40, 0xBD, 0xE8, 0x02, 0x00, 0x90, 0xE0, 0x03, 0x10, 0xA1, 0xE0, 0x11, 0xC0, 0xA0, 0xE3, 0xAB, 0x00, 0x00, 0xEA, 0x84, 0xCA, 0xB0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0x11, 0x81, 0xC0, 0x90, 0xE1, 0x1E, 0xFF, 0x2F, 0x01, 0x11, 0xC0, 0xA0, 0xE3, 0xA4, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x40, 0xA1, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x03, 0xE0, 0xA3, 0xE0, 0x0C, 0x00, 0x54, 0xE1, 0x0C, 0x00, 0x5E, 0x91, 0x04, 0xC3, 0x9F, 0xE5, 0x10, 0x40, 0xBD, 0xE8, 0xC2, 0x00, 0x00, 0x8A, 0xFF, 0xFF, 0xFF, 0xEA, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA1, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x03, 0x20, 0xA3, 0xE0, 0x02, 0x00, 0x50, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x80, 0x09, 0x70, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x1E, 0xFF, 0x2F, 0x01, 0x03, 0x10, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x31, 0xE1, 0x1E, 0xFF, 0x2F, 0x51, 0x00, 0x20, 0xA0, 0xE3, 0xB4, 0xC2, 0x9F, 0xE5, 0xF2, 0x02, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x9C, 0xC2, 0x9F, 0xE5, 0x81, 0x40, 0xDC, 0xE1, 0x83, 0x40, 0xDC, 0x11, 0x04, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x31, 0xE1, 0x80, 0x14, 0x21, 0xE2, 0x83, 0xFF, 0xFF, 0x4A, 0x80, 0x34, 0x23, 0xE2, 0x0F, 0x00, 0x00, 0xEA, 0x03, 0x10, 0x21, 0xE0, 0x02, 0x00, 0x20, 0xE0, 0x01, 0x30, 0x23, 0xE0, 0x00, 0x20, 0x22, 0xE0, 0x03, 0x10, 0x21, 0xE0, 0x02, 0x00, 0x20, 0xE0, 0x7C, 0x00, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x10, 0x40, 0x2D, 0xE9, 0x54, 0xC2, 0x9F, 0xE5, 0x81, 0x40, 0xDC, 0xE1, 0x83, 0x40, 0xDC, 0x11, 0x76, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x31, 0xE1, 0x80, 0x34, 0x23, 0x42, 0x71, 0xFF, 0xFF, 0x4A, 0x02, 0x40, 0x50, 0xE0, 0x03, 0xE0, 0xD1, 0xE0, 0x04, 0x00, 0x00, 0x2A, 0x80, 0xE4, 0x2E, 0xE2, 0x04, 0x20, 0x92, 0xE0, 0x0E, 0x30, 0xA3, 0xE0, 0x04, 0x00, 0x50, 0xE0, 0x0E, 0x10, 0xC1, 0xE0, 0x21, 0x4A, 0xA0, 0xE1, 0x23, 0xEA, 0x44, 0xE0, 0x83, 0x00, 0x1C, 0xE1, 0x4D, 0x00, 0x00, 0x0A, 0x04, 0x1A, 0xC1, 0xE1, 0xCC, 0x30, 0xC3, 0xE1, 0x00, 0x20, 0x72, 0xE2, 0xCC, 0x30, 0xE3, 0xE0, 0x20, 0xC0, 0x7E, 0xE2, 0x10, 0x00, 0x00, 0x3A, 0x32, 0x0E, 0x90, 0xE0, 0x53, 0x1E, 0xA1, 0xE0, 0x13, 0x0C, 0x90, 0xE0, 0x00, 0x10, 0xB1, 0xE2, 0x15, 0x00, 0x00, 0x4A, 0x04, 0x1A, 0x81, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0x12, 0x2C, 0xB0, 0xE1, 0x49, 0xC1, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0x51, 0x01, 0x00, 0x90, 0xE2, 0x80, 0x04, 0x52, 0x13, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0x81, 0x02, 0x01, 0x00, 0xC0, 0x13, 0x1E, 0xFF, 0x2F, 0xE1, 0x02, 0xC0, 0x92, 0xE0, 0x03, 0x20, 0xA3, 0xE0, 0x01, 0xC0, 0xA0, 0x13, 0x82, 0x20, 0x8C, 0xE1, 0x20, 0xE0, 0x4E, 0xE2, 0x1E, 0xC0, 0x7E, 0xE2, 0x27, 0x00, 0x00, 0x9A, 0x53, 0x0E, 0x90, 0xE0, 0x00, 0x10, 0xD1, 0xE2, 0xE9, 0xFF, 0xFF, 0x5A, 0x01, 0xC0, 0x8C, 0xE2, 0x12, 0xCC, 0xB0, 0xE1, 0x00, 0x00, 0xB0, 0xE0, 0x01, 0x10, 0xA1, 0xE0, 0x84, 0xEA, 0x81, 0xE0, 0xAE, 0xEA, 0xB0, 0xE1, 0x08, 0x00, 0x00, 0x9A, 0x04, 0x1A, 0x81, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0xAC, 0x0F, 0x90, 0xE0, 0x80, 0x04, 0x5C, 0x33, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0x81, 0x02, 0x01, 0x00, 0xC0, 0x13, 0x1E, 0xFF, 0x2F, 0xE1, 0x16, 0x00, 0x00, 0x2A, 0x80, 0x19, 0x91, 0xE2, 0x00, 0x00, 0x50, 0x03, 0x10, 0x40, 0xBD, 0x08, 0x28, 0x00, 0x00, 0x0A, 0xA4, 0xE5, 0xA0, 0xE1, 0x80, 0x4E, 0xC4, 0xE3, 0x02, 0x40, 0x44, 0xE2, 0x00, 0x00, 0x90, 0xE0, 0x01, 0x10, 0xA1, 0xE0, 0x01, 0x40, 0x44, 0xE2, 0x40, 0x09, 0x11, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x8E, 0x1F, 0x81, 0xE0, 0x04, 0x1A, 0x81, 0xE0, 0x00, 0x00, 0x54, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xC1, 0x60, 0x14, 0x81, 0xE2, 0x12, 0xC0, 0xA0, 0xE3, 0xF7, 0x01, 0x00, 0xEA, 0x04, 0x1A, 0x81, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xC1, 0x10, 0xB0, 0xE1, 0x60, 0x00, 0xA0, 0xE1, 0x04, 0x1A, 0x81, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0x12, 0x00, 0x00, 0xEA, 0x03, 0xC6, 0x92, 0xE1, 0x0B, 0x00, 0x00, 0x0A, 0x84, 0xCA, 0xB0, 0xE1, 0x04, 0x1A, 0xC1, 0xE1, 0x04, 0x00, 0x00, 0x0A, 0x80, 0x34, 0xC3, 0xE3, 0x01, 0xE0, 0x4E, 0xE2, 0x00, 0x20, 0x72, 0xE2, 0x00, 0x30, 0xE3, 0xE2, 0xAB, 0xFF, 0xFF, 0xEA, 0x02, 0x00, 0x50, 0xE0, 0x03, 0x10, 0xC1, 0xE0, 0x10, 0x40, 0xBD, 0xE8, 0x04, 0x00, 0x00, 0xEA, 0x10, 0x40, 0xBD, 0xE8, 0x81, 0xC0, 0x90, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x12, 0xC0, 0xA0, 0xE3, 0x81, 0x20, 0xB0, 0xE1, 0x00, 0x00, 0x10, 0x01, 0xF9, 0xFF, 0xFF, 0x0A, 0x80, 0x09, 0x52, 0xE3, 0x1E, 0xFF, 0x2F, 0x21, 0x2F, 0x02, 0x00, 0xEA, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x40, 0xA1, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x03, 0xE0, 0xA3, 0xE0, 0x0C, 0x00, 0x54, 0xE1, 0x0C, 0x00, 0x5E, 0x91, 0x5C, 0xC0, 0x9F, 0xE5, 0x10, 0x40, 0xBD, 0xE8, 0x17, 0x00, 0x00, 0x8A, 0xFF, 0xFF, 0xFF, 0xEA, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA1, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x03, 0x20, 0xA3, 0xE0, 0x02, 0x00, 0x50, 0xE1, 0x05, 0x00, 0x00, 0x0A, 0x80, 0x09, 0x70, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x1E, 0xFF, 0x2F, 0x01, 0x80, 0x14, 0x23, 0xE2, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x31, 0xE1, 0x1E, 0xFF, 0x2F, 0x41, 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0xC0, 0x9F, 0xE5, 0x47, 0x02, 0x00, 0xEA, 0x00, 0x00, 0xE0, 0xFF, 0x11, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x04, 0x78, 0x47, 0x00, 0x00, 0x30, 0x00, 0x2D, 0xE9, 0x40, 0x59, 0xA0, 0xE3, 0x01, 0x00, 0x50, 0xE3, 0x81, 0x40, 0xA5, 0xE0, 0x01, 0x00, 0x52, 0xE3, 0x83, 0x50, 0xA5, 0xE0, 0x40, 0x09, 0x74, 0xE3, 0x40, 0x09, 0x75, 0x93, 0x04, 0x00, 0x00, 0x8A, 0x40, 0x09, 0x54, 0xE3, 0x30, 0x00, 0xBD, 0xE8, 0x03, 0x10, 0xA0, 0x21, 0x02, 0x00, 0xA0, 0x21, 0xB0, 0x02, 0x00, 0xEA, 0x30, 0x00, 0xBD, 0xE8, 0x32, 0x02, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x80, 0x0A, 0x11, 0xE3, 0x2F, 0x02, 0x00, 0x0A, 0x4F, 0x20, 0x0C, 0xE2, 0x48, 0x00, 0x52, 0xE3, 0xA8, 0x02, 0x00, 0x1A, 0x2B, 0x02, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x00, 0x40, 0x2D, 0xE9, 0x80, 0xE9, 0xA0, 0xE3, 0x81, 0x00, 0x7E, 0xE1, 0x00, 0x00, 0x50, 0x03, 0x83, 0x00, 0x7E, 0x91, 0x00, 0x00, 0x52, 0x03, 0x0E, 0x00, 0x00, 0x8A, 0x00, 0x40, 0xBD, 0xE8, 0xFF, 0xFF, 0xFF, 0xEA, 0x03, 0xC0, 0x91, 0xE1, 0x03, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x03, 0x00, 0x00, 0x6A, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x53, 0xE1, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0x71, 0x01, 0xC0, 0xA0, 0xE3, 0x02, 0x00, 0x5C, 0x33, 0x00, 0x00, 0x5C, 0x63, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x40, 0xBD, 0xE8, 0x50, 0x0A, 0x1C, 0xE3, 0x11, 0x02, 0x00, 0x1A, 0xCD, 0xFF, 0xFF, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x03, 0xC0, 0x91, 0xE1, 0x0B, 0x00, 0x00, 0x4A, 0x40, 0x09, 0x7C, 0xE3, 0x03, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x1E, 0xFF, 0x2F, 0x11, 0x02, 0x00, 0x50, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0x09, 0x71, 0xE3, 0x40, 0x09, 0x73, 0x53, 0x11, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0x09, 0x7C, 0xE3, 0x05, 0x00, 0x00, 0x5A, 0x81, 0xC0, 0x90, 0xE1, 0x83, 0xC0, 0x92, 0x01, 0x01, 0x00, 0x53, 0x11, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0xC9, 0xA0, 0xE3, 0x81, 0x00, 0x7C, 0xE1, 0x83, 0x00, 0x7C, 0x31, 0x02, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x53, 0xE1, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0xC0, 0x9F, 0xE5, 0xC5, 0xFF, 0xFF, 0xEA, 0x19, 0x00, 0x12, 0x04, 0x78, 0x47, 0x00, 0x00, 0x03, 0x00, 0x2D, 0xE9, 0x41, 0x2A, 0xB0, 0xE1, 0x81, 0x35, 0xA0, 0xE1, 0xA0, 0x3A, 0x83, 0xE1, 0x80, 0x34, 0x83, 0x13, 0x08, 0x00, 0x00, 0x4A, 0xE0, 0x2F, 0x42, 0xE2, 0x9E, 0x20, 0x72, 0xE2, 0x13, 0x00, 0x00, 0xDA, 0xFF, 0x00, 0x52, 0xE3, 0x00, 0x10, 0xA0, 0xC3, 0x33, 0x12, 0xA0, 0xD1, 0x01, 0x00, 0xA0, 0xE1, 0x08, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x2A, 0xA0, 0xE1, 0xA2, 0x2A, 0xB0, 0xE1, 0x80, 0x34, 0xC3, 0x03, 0x00, 0x10, 0xA0, 0xE3, 0xE0, 0x2F, 0x42, 0xE2, 0x9E, 0x20, 0x72, 0xE2, 0x06, 0x00, 0x00, 0xBA, 0xFF, 0x00, 0x52, 0xE3, 0x33, 0x12, 0x41, 0xD0, 0x00, 0x00, 0x51, 0xE3, 0x08, 0xD0, 0x8D, 0xD2, 0x01, 0x00, 0xA0, 0xD1, 0x1E, 0xFF, 0x2F, 0xD1, 0xFF, 0xFF, 0xFF, 0xEA, 0x03, 0x00, 0xBD, 0xE8, 0x20, 0xC0, 0x9F, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x30, 0xA1, 0xE0, 0x80, 0x09, 0x73, 0xE3, 0x40, 0xCB, 0x8C, 0x83, 0x98, 0xFF, 0xFF, 0x8A, 0xC9, 0x01, 0x00, 0x3A, 0xFF, 0xFF, 0xFF, 0xEA, 0x00, 0xC0, 0x9F, 0xE5, 0xC6, 0x01, 0x00, 0xEA, 0xC8, 0x00, 0x02, 0x04, 0x78, 0x47, 0x00, 0x00, 0x03, 0x00, 0x2D, 0xE9, 0x41, 0x2A, 0xB0, 0xE1, 0x81, 0x35, 0xA0, 0xE1, 0xA0, 0x3A, 0x83, 0xE1, 0x80, 0x34, 0x83, 0x13, 0x10, 0x00, 0x00, 0x4A, 0xE0, 0x2F, 0x42, 0xE2, 0x9E, 0x20, 0x72, 0xE2, 0x13, 0x00, 0x00, 0xBA, 0xFF, 0x00, 0x52, 0xE3, 0x00, 0x10, 0xA0, 0xC3, 0x33, 0x12, 0xA0, 0xD1, 0x01, 0x00, 0xA0, 0xE1, 0x08, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xBF, 0x40, 0x24, 0x81, 0xE2, 0x40, 0x09, 0x72, 0xE3, 0x02, 0x00, 0x00, 0xAA, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x00, 0xBD, 0xE8, 0x20, 0xC0, 0x9F, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x30, 0xA1, 0xE0, 0x80, 0x09, 0x73, 0xE3, 0x40, 0xCB, 0x8C, 0x83, 0x6E, 0xFF, 0xFF, 0x8A, 0x9F, 0x01, 0x00, 0x3A, 0xFF, 0xFF, 0xFF, 0xEA, 0x00, 0xC0, 0x9F, 0xE5, 0x9C, 0x01, 0x00, 0xEA, 0xE8, 0x00, 0x02, 0x04, 0x78, 0x47, 0x00, 0x00, 0x40, 0x34, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x04, 0x00, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x80, 0x34, 0x10, 0xE2, 0x00, 0x10, 0x60, 0x12, 0x00, 0x10, 0xA0, 0x01, 0x40, 0x34, 0x83, 0xE3, 0x21, 0x08, 0xB0, 0xE1, 0x40, 0x37, 0x83, 0x12, 0x01, 0x18, 0xB0, 0x01, 0x1E, 0xFF, 0x2F, 0x01, 0xFF, 0x04, 0x11, 0xE3, 0x80, 0x38, 0x83, 0x12, 0x01, 0x14, 0xA0, 0x01, 0xF0, 0x04, 0x11, 0xE3, 0x40, 0x38, 0x83, 0x12, 0x01, 0x12, 0xA0, 0x01, 0xC0, 0x04, 0x11, 0xE3, 0x80, 0x39, 0x83, 0x12, 0x01, 0x11, 0xB0, 0x01, 0x40, 0x39, 0x83, 0x42, 0x81, 0x10, 0xA0, 0x51, 0x81, 0x0A, 0xA0, 0xE1, 0xC1, 0x15, 0x83, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x47, 0x00, 0x00, 0x03, 0xC0, 0x91, 0xE1, 0x0B, 0x00, 0x00, 0x4A, 0x40, 0x09, 0x7C, 0xE3, 0x03, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x1E, 0xFF, 0x2F, 0x11, 0x02, 0x00, 0x50, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0x09, 0x71, 0xE3, 0x40, 0x09, 0x73, 0x53, 0x11, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0x09, 0x7C, 0xE3, 0x05, 0x00, 0x00, 0x5A, 0x81, 0xC0, 0x90, 0xE1, 0x83, 0xC0, 0x92, 0x01, 0x01, 0x00, 0x53, 0x11, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0xC9, 0xA0, 0xE3, 0x81, 0x00, 0x7C, 0xE1, 0x83, 0x00, 0x7C, 0x31, 0x02, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x53, 0xE1, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0xC0, 0x9F, 0xE5, 0x35, 0xFF, 0xFF, 0xEA, 0x19, 0x00, 0x13, 0x04, 0x78, 0x47, 0x00, 0x00, 0x03, 0xC0, 0x91, 0xE1, 0x0B, 0x00, 0x00, 0x4A, 0x40, 0x09, 0x7C, 0xE3, 0x03, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x1E, 0xFF, 0x2F, 0x11, 0x02, 0x00, 0x50, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0x09, 0x71, 0xE3, 0x40, 0x09, 0x73, 0x53, 0x11, 0x00, 0x00, 0x4A, 0x03, 0x00, 0x51, 0xE1, 0x02, 0x00, 0x50, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0x09, 0x7C, 0xE3, 0x05, 0x00, 0x00, 0x5A, 0x81, 0xC0, 0x90, 0xE1, 0x83, 0xC0, 0x92, 0x01, 0x01, 0x00, 0x53, 0x11, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0xC9, 0xA0, 0xE3, 0x81, 0x00, 0x7C, 0xE1, 0x83, 0x00, 0x7C, 0x31, 0x02, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x53, 0xE1, 0x00, 0x00, 0x52, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0xC0, 0x9F, 0xE5, 0x14, 0xFF, 0xFF, 0xEA, 0x19, 0x00, 0x16, 0x04, 0x78, 0x47, 0x00, 0x00, 0x70, 0x40, 0x2D, 0xE9, 0xA4, 0xC2, 0x9F, 0xE5, 0x21, 0xE2, 0xDC, 0xE1, 0x23, 0xE2, 0xDC, 0x11, 0x91, 0x00, 0x00, 0x0A, 0x21, 0xE2, 0x0C, 0xE0, 0x03, 0x50, 0x21, 0xE0, 0xA5, 0xEF, 0x8E, 0xE1, 0x23, 0x52, 0x1C, 0xE0, 0x0C, 0x02, 0x11, 0x11, 0x41, 0x00, 0x00, 0x0A, 0x05, 0xE0, 0x8E, 0xE0, 0xFF, 0xE7, 0x4E, 0xE2, 0x8C, 0x12, 0xC1, 0xE1, 0x8C, 0x32, 0xC3, 0xE1, 0x40, 0x19, 0x81, 0xE3, 0x40, 0x39, 0x83, 0xE3, 0x91, 0x42, 0x8C, 0xE0, 0x90, 0x63, 0x85, 0xE0, 0x04, 0x60, 0x96, 0xE0, 0x0C, 0x50, 0xB5, 0xE0, 0x91, 0x43, 0x8C, 0xE0, 0x00, 0x30, 0xAC, 0xE2, 0x90, 0x12, 0x8C, 0xE0, 0x0C, 0x60, 0x96, 0xE0, 0x04, 0x50, 0xB5, 0xE0, 0x00, 0x30, 0xB3, 0xE2, 0x01, 0x00, 0x11, 0xE1, 0x01, 0x60, 0x86, 0x13, 0x03, 0x20, 0xE0, 0xE3, 0x14, 0xC0, 0xA0, 0xE3, 0x80, 0x0F, 0x53, 0xE3, 0x00, 0xC0, 0xAC, 0xE2, 0x4E, 0x28, 0xA2, 0xE0, 0x20, 0x40, 0x6C, 0xE2, 0x13, 0x14, 0xA0, 0xE1, 0x15, 0x04, 0xA0, 0xE1, 0x35, 0x1C, 0x81, 0xE1, 0x36, 0x0C, 0x80, 0xE1, 0x02, 0x1A, 0x81, 0xE0, 0x8E, 0x1F, 0x21, 0xE0, 0x16, 0x44, 0xB0, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x84, 0xC0, 0xB0, 0xE1, 0xC0, 0x44, 0xA0, 0x33, 0x06, 0x00, 0x00, 0x3A, 0x80, 0x34, 0x83, 0x03, 0x00, 0x00, 0xB0, 0xE2, 0x00, 0x10, 0xA1, 0xE2, 0x40, 0x44, 0xA0, 0xE3, 0xA3, 0x0F, 0x10, 0xE1, 0xA3, 0x0F, 0xC0, 0xE1, 0xC0, 0x44, 0xA0, 0x13, 0x8E, 0x0F, 0x31, 0xE1, 0xD4, 0xC1, 0x9F, 0xE5, 0x0C, 0x00, 0x00, 0x4A, 0x0C, 0x00, 0x11, 0xE1, 0x01, 0xC0, 0xDC, 0x11, 0x09, 0x00, 0x00, 0x0A, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x8E, 0x4F, 0xB0, 0xE1, 0x80, 0x08, 0x1C, 0x53, 0x40, 0x08, 0x1C, 0x43, 0x40, 0x44, 0xA0, 0x03, 0xC0, 0x44, 0xA0, 0x13, 0x01, 0x00, 0x90, 0x02, 0x00, 0x10, 0xA1, 0xE2, 0xEF, 0xFF, 0xFF, 0xEA, 0x40, 0x06, 0x5E, 0xE3, 0x60, 0x14, 0x81, 0xD2, 0x60, 0x14, 0x41, 0xA2, 0x13, 0xC0, 0x84, 0xE3, 0x40, 0xC5, 0x8C, 0xA3, 0x70, 0x40, 0xBD, 0xE8, 0x63, 0x00, 0x00, 0xDA, 0xF0, 0x00, 0x00, 0xEA, 0x81, 0x40, 0x90, 0xE1, 0x83, 0x40, 0x92, 0x11, 0x04, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x15, 0xE1, 0x25, 0x00, 0x00, 0x0A, 0x01, 0x40, 0xDE, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0xB5, 0xFF, 0xFF, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x8E, 0x1F, 0xA0, 0xE1, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x40, 0xEB, 0x8E, 0xE2, 0x80, 0x14, 0xC1, 0xE3, 0x20, 0x66, 0x91, 0xE1, 0x00, 0x0A, 0xA0, 0x01, 0x50, 0xE9, 0x4E, 0x02, 0x01, 0x00, 0x11, 0xE1, 0x20, 0x16, 0xA0, 0x01, 0x00, 0x0A, 0xA0, 0x01, 0x50, 0xE9, 0x4E, 0x02, 0x00, 0x40, 0xA0, 0xE3, 0xA1, 0x62, 0xB0, 0xE1, 0x01, 0x18, 0xA0, 0x01, 0x10, 0x40, 0x84, 0x02, 0xA1, 0x66, 0xB0, 0xE1, 0x01, 0x14, 0xA0, 0x01, 0x08, 0x40, 0x84, 0x02, 0xA1, 0x68, 0xB0, 0xE1, 0x01, 0x12, 0xA0, 0x01, 0x04, 0x40, 0x84, 0x02, 0xA1, 0x69, 0xB0, 0xE1, 0x01, 0x11, 0xA0, 0x01, 0x02, 0x40, 0x84, 0x02, 0x21, 0x6A, 0xB0, 0xE1, 0x81, 0x10, 0xA0, 0x01, 0x01, 0x40, 0x84, 0x02, 0x04, 0xE8, 0x4E, 0xE0, 0x10, 0x64, 0xA0, 0xE1, 0x20, 0x40, 0x64, 0xE2, 0x30, 0x14, 0x81, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x92, 0xFF, 0xFF, 0xEA, 0x40, 0x5B, 0x85, 0xE2, 0x80, 0x34, 0xC3, 0xE3, 0x22, 0x66, 0x93, 0xE1, 0x02, 0x2A, 0xA0, 0x01, 0x50, 0x59, 0x45, 0x02, 0x03, 0x00, 0x13, 0xE1, 0x22, 0x36, 0xA0, 0x01, 0x02, 0x2A, 0xA0, 0x01, 0x50, 0x59, 0x45, 0x02, 0x00, 0x40, 0xA0, 0xE3, 0xA3, 0x62, 0xB0, 0xE1, 0x03, 0x38, 0xA0, 0x01, 0x10, 0x40, 0x84, 0x02, 0xA3, 0x66, 0xB0, 0xE1, 0x03, 0x34, 0xA0, 0x01, 0x08, 0x40, 0x84, 0x02, 0xA3, 0x68, 0xB0, 0xE1, 0x03, 0x32, 0xA0, 0x01, 0x04, 0x40, 0x84, 0x02, 0xA3, 0x69, 0xB0, 0xE1, 0x03, 0x31, 0xA0, 0x01, 0x02, 0x40, 0x84, 0x02, 0x23, 0x6A, 0xB0, 0xE1, 0x83, 0x30, 0xA0, 0x01, 0x01, 0x40, 0x84, 0x02, 0x04, 0x58, 0x45, 0xE0, 0x12, 0x64, 0xA0, 0xE1, 0x20, 0x40, 0x64, 0xE2, 0x32, 0x34, 0x83, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0xBA, 0xFF, 0xFF, 0xEA, 0x81, 0x50, 0xA0, 0xE1, 0x83, 0x60, 0xA0, 0xE1, 0x8C, 0x02, 0x55, 0xE1, 0x00, 0x00, 0x50, 0x03, 0x8C, 0x02, 0x56, 0x91, 0x00, 0x00, 0x52, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x38, 0xC0, 0x9F, 0xE5, 0x5A, 0xFE, 0xFF, 0x8A, 0xFF, 0xFF, 0xFF, 0xEA, 0x81, 0xC0, 0x90, 0xE1, 0x83, 0xC0, 0x92, 0x11, 0x05, 0x00, 0x00, 0x0A, 0x03, 0x10, 0x21, 0xE0, 0x00, 0x00, 0xA0, 0xE3, 0x80, 0x14, 0x01, 0xE2, 0x7F, 0x14, 0x81, 0xE3, 0xF0, 0x18, 0x81, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x08, 0xC0, 0x9F, 0xE5, 0x91, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0x7F, 0x13, 0x00, 0x00, 0x04, 0x78, 0x47, 0x00, 0x00, 0x03, 0x00, 0x2D, 0xE9, 0x0C, 0x50, 0x2D, 0xE9, 0x64, 0xF2, 0xFF, 0xEB, 0x0C, 0x50, 0xBD, 0xE8, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xBD, 0xE8, 0x00, 0x30, 0x93, 0xE5, 0x40, 0x07, 0x13, 0xE3, 0x80, 0x14, 0x01, 0x12, 0x00, 0x00, 0xA0, 0x13, 0x1E, 0xFF, 0x2F, 0x11, 0x80, 0x0E, 0x13, 0xE3, 0x7D, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x11, 0xE1, 0x40, 0xCB, 0x8C, 0x43, 0x60, 0x3E, 0xA0, 0xE3, 0x21, 0x2A, 0xA0, 0xE1, 0x01, 0x30, 0x83, 0xE2, 0x02, 0x1A, 0xC1, 0xE1, 0x80, 0x2E, 0xC2, 0xE3, 0x02, 0x20, 0x43, 0xE0, 0x40, 0x19, 0x81, 0xE3, 0x35, 0x00, 0x52, 0xE3, 0x22, 0x00, 0x00, 0x8A, 0x1B, 0x00, 0x00, 0x0A, 0x15, 0x00, 0x52, 0xE3, 0x10, 0x00, 0x00, 0x3A, 0x20, 0x20, 0x52, 0xE2, 0x06, 0x00, 0x00, 0x9A, 0x20, 0x30, 0x62, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x31, 0x02, 0xA0, 0xE1, 0x11, 0x23, 0xA0, 0xE1, 0x01, 0x20, 0x82, 0x13, 0x00, 0x10, 0xA0, 0xE3, 0x19, 0x00, 0x00, 0xEA, 0x00, 0x30, 0x62, 0xE2, 0x20, 0x20, 0x82, 0xE2, 0x11, 0x13, 0xA0, 0xE1, 0x30, 0x12, 0x81, 0xE1, 0x10, 0x23, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x11, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x2D, 0xE9, 0x20, 0x30, 0x62, 0xE2, 0x10, 0x43, 0xA0, 0xE1, 0x11, 0x33, 0xA0, 0xE1, 0x30, 0x02, 0x83, 0xE1, 0x31, 0x12, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x10, 0x00, 0xBD, 0xE8, 0x08, 0x00, 0x00, 0xEA, 0x01, 0x26, 0x90, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x80, 0x24, 0xA0, 0xE3, 0x01, 0x20, 0x82, 0x12, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0xA0, 0xE3, 0x40, 0x0B, 0x1C, 0xE3, 0x40, 0xCB, 0xCC, 0xE3, 0x80, 0x14, 0x81, 0x13, 0x02, 0x00, 0x12, 0xE1, 0x1E, 0xFF, 0x2F, 0x01, 0x82, 0x20, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x3A, 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2, 0x03, 0x00, 0x2D, 0xE9, 0x0C, 0x50, 0x2D, 0xE9, 0x1C, 0xF2, 0xFF, 0xEB, 0x0C, 0x50, 0xBD, 0xE8, 0x00, 0x20, 0xA0, 0xE1, 0x03, 0x00, 0xBD, 0xE8, 0x00, 0x30, 0x92, 0xE5, 0x08, 0x30, 0x83, 0xE3, 0x00, 0x30, 0x82, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x4C, 0x2F, 0xB0, 0xE1, 0xF1, 0xFF, 0xFF, 0x4A, 0xF2, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2, 0x01, 0x00, 0xC0, 0xE3, 0xEE, 0xFF, 0xFF, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x03, 0x00, 0x2D, 0xE9, 0x0C, 0x50, 0x2D, 0xE9, 0x0A, 0xF2, 0xFF, 0xEB, 0x0C, 0x50, 0xBD, 0xE8, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xBD, 0xE8, 0x00, 0x30, 0x93, 0xE5, 0x40, 0x07, 0x13, 0xE3, 0x80, 0x14, 0x01, 0x12, 0x00, 0x00, 0xA0, 0x13, 0x1E, 0xFF, 0x2F, 0x11, 0x80, 0x0E, 0x13, 0xE3, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x40, 0x2D, 0xE9, 0x60, 0xE6, 0xA0, 0xE3, 0xA1, 0xEF, 0x8E, 0xE1, 0x80, 0x14, 0xC1, 0xE3, 0x20, 0x36, 0x91, 0xE1, 0x00, 0x0A, 0xA0, 0x01, 0x50, 0xE9, 0x4E, 0x02, 0x01, 0x00, 0x11, 0xE1, 0x20, 0x16, 0xA0, 0x01, 0x00, 0x0A, 0xA0, 0x01, 0x50, 0xE9, 0x4E, 0x02, 0x00, 0x20, 0xA0, 0xE3, 0xA1, 0x32, 0xB0, 0xE1, 0x01, 0x18, 0xA0, 0x01, 0x10, 0x20, 0x82, 0x02, 0xA1, 0x36, 0xB0, 0xE1, 0x01, 0x14, 0xA0, 0x01, 0x08, 0x20, 0x82, 0x02, 0xA1, 0x38, 0xB0, 0xE1, 0x01, 0x12, 0xA0, 0x01, 0x04, 0x20, 0x82, 0x02, 0xA1, 0x39, 0xB0, 0xE1, 0x01, 0x11, 0xA0, 0x01, 0x02, 0x20, 0x82, 0x02, 0x21, 0x3A, 0xB0, 0xE1, 0x81, 0x10, 0xA0, 0x01, 0x01, 0x20, 0x82, 0x02, 0x02, 0xE8, 0x4E, 0xE0, 0x10, 0x32, 0xA0, 0xE1, 0x20, 0x20, 0x62, 0xE2, 0x30, 0x12, 0x81, 0xE1, 0x03, 0x00, 0xA0, 0xE1, 0x8E, 0x1F, 0x21, 0xE0, 0x01, 0xE0, 0xCE, 0xE3, 0x0E, 0x12, 0x81, 0xE0, 0x00, 0x40, 0xBD, 0xE8, 0x80, 0xC5, 0x8C, 0xE3, 0xA3, 0x00, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x10, 0x00, 0x1C, 0xE3, 0x01, 0x20, 0xA0, 0x01, 0x0F, 0x00, 0x2D, 0xE9, 0x03, 0x00, 0x2D, 0xE9, 0x0C, 0x50, 0x2D, 0xE9, 0xD3, 0xF1, 0xFF, 0xEB, 0x0C, 0x50, 0xBD, 0xE8, 0x00, 0x20, 0xA0, 0xE1, 0x03, 0x00, 0xBD, 0xE8, 0x00, 0x10, 0x92, 0xE5, 0x01, 0x39, 0xCC, 0xE1, 0xC0, 0x35, 0x13, 0xE2, 0x40, 0xC4, 0x8C, 0x13, 0x8C, 0x30, 0xA0, 0xE1, 0xA3, 0x3D, 0xA0, 0xE1, 0x03, 0x10, 0x81, 0xE1, 0x70, 0x37, 0x01, 0xE2, 0x03, 0xC0, 0x8C, 0xE1, 0x00, 0x10, 0x82, 0xE5, 0x0F, 0x30, 0x0C, 0xE2, 0x08, 0x00, 0x33, 0xE3, 0x70, 0x30, 0x0C, 0x12, 0x83, 0xC1, 0x8C, 0x11, 0x80, 0x3B, 0xA0, 0x03, 0x0C, 0x30, 0xD3, 0x01, 0xC0, 0xC8, 0x8C, 0x03, 0x80, 0x05, 0x1C, 0xE3, 0x0D, 0x00, 0x00, 0x1A, 0x40, 0x05, 0x1C, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x40, 0x04, 0x1C, 0xE3, 0x14, 0x00, 0x00, 0x1A, 0x80, 0x06, 0x1C, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x40, 0x0F, 0x11, 0xE3, 0x0F, 0x00, 0xBD, 0xE8, 0x20, 0x00, 0x00, 0x0A, 0x7C, 0x00, 0x00, 0xEA, 0x40, 0x0E, 0x11, 0xE3, 0x0F, 0x00, 0xBD, 0xE8, 0x11, 0x00, 0x00, 0x0A, 0x78, 0x00, 0x00, 0xEA, 0x80, 0x0E, 0x11, 0xE3, 0x0F, 0x00, 0xBD, 0xE8, 0x0B, 0x00, 0x00, 0x0A, 0x74, 0x00, 0x00, 0xEA, 0x80, 0x0F, 0x11, 0xE3, 0x0F, 0x00, 0xBD, 0xE8, 0x71, 0x00, 0x00, 0x1A, 0x10, 0x00, 0x1C, 0xE3, 0x03, 0x20, 0x21, 0x10, 0x02, 0x20, 0x20, 0x00, 0x08, 0x00, 0x00, 0xEA, 0x40, 0x0D, 0x11, 0xE3, 0x0F, 0x00, 0xBD, 0xE8, 0x00, 0x00, 0x00, 0x0A, 0x69, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x1C, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x00, 0x1C, 0xE3, 0x80, 0x24, 0x01, 0x12, 0x80, 0x24, 0x00, 0x02, 0x80, 0x24, 0x02, 0xE2, 0x10, 0x00, 0x1C, 0xE3, 0x38, 0x00, 0x8F, 0x12, 0x03, 0x00, 0x90, 0x18, 0x02, 0x10, 0x81, 0x11, 0x3C, 0x00, 0x9F, 0x05, 0x02, 0x00, 0x80, 0x01, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x00, 0x1C, 0xE3, 0x80, 0x24, 0x01, 0x12, 0x80, 0x24, 0x00, 0x02, 0x10, 0x00, 0x1C, 0xE3, 0x28, 0x00, 0x8F, 0x12, 0x03, 0x00, 0x90, 0x18, 0x02, 0x10, 0x81, 0x11, 0x24, 0x00, 0x9F, 0x05, 0x02, 0x00, 0x80, 0x01, 0x2B, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7F, 0x00, 0x00, 0x80, 0x7F, 0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xC0, 0x7F, 0x78, 0x47, 0x00, 0x00, 0x80, 0xC8, 0x80, 0xE2, 0x7F, 0x04, 0x1C, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xC0, 0x11, 0xB0, 0xE1, 0x80, 0x0E, 0xA0, 0xE1, 0xE0, 0x15, 0x81, 0xE2, 0x1E, 0xFF, 0x2F, 0x51, 0x70, 0x14, 0x41, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x08, 0x1C, 0xE3, 0x06, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE1, 0x80, 0x00, 0xB0, 0xE1, 0x1E, 0xFF, 0x2F, 0x01, 0x80, 0x24, 0x01, 0xE2, 0xDA, 0x35, 0x82, 0xE2, 0x81, 0x11, 0xA0, 0xE1, 0x00, 0xFE, 0xFF, 0xEA, 0x80, 0x24, 0xB0, 0xE1, 0x10, 0xC0, 0x9F, 0xE5, 0x05, 0x00, 0x00, 0x1A, 0xFF, 0xFF, 0xFF, 0xEA, 0x70, 0x18, 0x80, 0xE3, 0x02, 0x00, 0xA0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x18, 0x00, 0x00, 0x04, 0x78, 0x47, 0x00, 0x00, 0x40, 0x08, 0x10, 0xE3, 0x88, 0xFF, 0xFF, 0x0A, 0x4F, 0x20, 0x0C, 0xE2, 0x48, 0x00, 0x52, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x84, 0xFF, 0xFF, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x0F, 0x30, 0x0C, 0xE2, 0x09, 0x00, 0x53, 0xE3, 0x08, 0x00, 0xA0, 0x03, 0x2C, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x53, 0xE3, 0x1E, 0xFF, 0x2F, 0x11, 0x40, 0x00, 0x1C, 0x03, 0x16, 0x00, 0x00, 0x0A, 0x40, 0x0B, 0x1C, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x20, 0x00, 0x1C, 0xE3, 0x0C, 0x00, 0x00, 0x1A, 0x10, 0x00, 0x1C, 0xE3, 0x00, 0x20, 0xA0, 0x01, 0x01, 0x20, 0xA0, 0x11, 0x80, 0x04, 0xE0, 0x03, 0x80, 0x14, 0xE0, 0x13, 0x00, 0x00, 0xE0, 0x13, 0x80, 0x04, 0x12, 0xE3, 0x00, 0x00, 0xE0, 0x11, 0x01, 0x10, 0xE0, 0x11, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x10, 0xE0, 0xE3, 0x80, 0x04, 0x12, 0xE3, 0x00, 0x00, 0xE0, 0x11, 0x01, 0x10, 0xE0, 0x11, 0x1E, 0xFF, 0x2F, 0xE1, 0x10, 0x00, 0x1C, 0xE3, 0x08, 0x00, 0x9F, 0x05, 0x08, 0x10, 0x9F, 0x15, 0x00, 0x00, 0xA0, 0x13, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xF8, 0x7F, 0x78, 0x47, 0x00, 0x00, 0x00, 0x50, 0x2D, 0xE9, 0x00, 0x50, 0x2D, 0xE9, 0x58, 0xF1, 0xFF, 0xFA, 0x00, 0x50, 0xBD, 0xE8, 0x00, 0x50, 0xBD, 0xE8, 0x0F, 0x30, 0x0C, 0xE2, 0x09, 0x00, 0x33, 0xE3, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x00, 0xEA, 0x78, 0x47, 0x00, 0x00, 0x40, 0x09, 0x1C, 0xE3, 0x1A, 0x00, 0x00, 0x0A, 0xF0, 0x0A, 0x1C, 0xE3, 0x06, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x10, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x70, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1, 0xF0, 0x1A, 0x0C, 0xE2, 0x40, 0x0A, 0x51, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0xE0, 0x14, 0xA0, 0xE3, 0x80, 0x1E, 0x11, 0xE0, 0xC0, 0x15, 0x81, 0x23, 0x03, 0x00, 0x2D, 0xE9, 0x0C, 0x50, 0x2D, 0xE9, 0x1B, 0xF1, 0xFF, 0xEB, 0x0C, 0x50, 0xBD, 0xE8, 0x00, 0xC0, 0xA0, 0xE1, 0x03, 0x00, 0xBD, 0xE8, 0x00, 0x30, 0x9C, 0xE5, 0xF0, 0x34, 0xC3, 0xE3, 0x01, 0x30, 0x83, 0xE1, 0x00, 0x30, 0x8C, 0xE5, 0x00, 0x20, 0x0F, 0xE1, 0xF0, 0x24, 0xC2, 0xE3, 0x01, 0x20, 0x82, 0xE1, 0x02, 0xF0, 0x28, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x08, 0x1C, 0xE0, 0x01, 0x00, 0xA0, 0x13, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x8F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xC3, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xF8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x2E, 0x41, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x12, 0x63, 0x41, 0x00, 0x00, 0x00, 0x00, 0x84, 0xD7, 0x97, 0x41, 0x00, 0x00, 0x00, 0x00, 0x65, 0xCD, 0xCD, 0x41, 0x6E, 0x61, 0x6E, 0x00, 0x66, 0x6E, 0x69, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6E, 0x69, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6E, 0x69, 0x00, 0x73, 0x74, 0x72, 0x6E, 0x63, 0x70, 0x79, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x63, 0x70, 0x79, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x6D, 0x65, 0x6D, 0x6D, 0x6F, 0x76, 0x65, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x65, 0x6D, 0x63, 0x70, 0x79, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x73, 0x65, 0x74, 0x5F, 0x70, 0x75, 0x74, 0x63, 0x68, 0x61, 0x72, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x73, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x5F, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x5F, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x6D, 0x72, 0x5F, 0x63, 0x5F, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x64, 0x6F, 0x75, 0x62, 0x6C, 0x65, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x76, 0x6F, 0x69, 0x64, 0x2A, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x6C, 0x6F, 0x6E, 0x67, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x6C, 0x6F, 0x6E, 0x67, 0x20, 0x69, 0x6E, 0x74, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x6C, 0x6F, 0x6E, 0x67, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x69, 0x6E, 0x74, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x73, 0x68, 0x6F, 0x72, 0x74, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x29, 0x3A, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7A, 0x65, 0x6F, 0x66, 0x2E, 0x74, 0x78, 0x74, 0x00, 0x00, 0x25, 0x66, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x73, 0x74, 0x72, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x73, 0x74, 0x72, 0x6C, 0x65, 0x6E, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x6D, 0x65, 0x6D, 0x73, 0x65, 0x74, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x6D, 0x65, 0x6D, 0x63, 0x68, 0x72, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x73, 0x74, 0x72, 0x6E, 0x63, 0x6D, 0x70, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x63, 0x6D, 0x70, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x6D, 0x65, 0x6D, 0x63, 0x6D, 0x70, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x73, 0x74, 0x72, 0x6E, 0x63, 0x61, 0x74, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x63, 0x61, 0x74, 0x32, 0x20, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x25, 0x75, 0x2C, 0x20, 0x70, 0x6F, 0x73, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x5B, 0x25, 0x75, 0x5D, 0x0D, 0x0A, 0x00, 0x4D, 0x52, 0x50, 0x47, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6D, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x3A, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x61, 0x6C, 0x74, 0x69, 0x6D, 0x65, 0x72, 0x00, 0x00, 0x00, 0x56, 0x61, 0x6C, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x00, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6D, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x65, 0x72, 0x72, 0x20, 0x30, 0x31, 0x00, 0x00, 0x65, 0x78, 0x74, 0x20, 0x65, 0x72, 0x72, 0x3A, 0x25, 0x64, 0x00, 0x00, 0x63, 0x32, 0x75, 0x3A, 0x65, 0x72, 0x72, 0x20, 0x20, 0x20, 0x31, 0x00, 0x63, 0x32, 0x75, 0x3A, 0x65, 0x72, 0x72, 0x20, 0x20, 0x20, 0x32, 0x00, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x65, 0x72, 0x72, 0x3A, 0x25, 0x64, 0x00, 0x00, 0x72, 0x65, 0x61, 0x64, 0x20, 0x22, 0x25, 0x73, 0x22, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x6D, 0x72, 0x70, 0x20, 0x65, 0x72, 0x72, 0x2C, 0x63, 0x6F, 0x64, 0x65, 0x3D, 0x25, 0x64, 0x00, 0x00, 0x63, 0x72, 0x63, 0x20, 0x65, 0x72, 0x72, 0x21, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x20, 0x65, 0x72, 0x72, 0x21, 0x00, 0x1F, 0x8B, 0x00, 0x00, 0x1F, 0x9E, 0x00, 0x00, 0x61, 0x62, 0x63, 0x00, 0x24, 0x00, 0x00, 0x00, 0x54, 0x69, 0x6D, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x25, 0x64, 0x00, 0x43, 0x42, 0x20, 0x77, 0x68, 0x65, 0x6E, 0x20, 0x70, 0x61, 0x75, 0x73, 0x65, 0x21, 0x00, 0x00, 0x63, 0x61, 0x63, 0x68, 0x65, 0x00, 0x00, 0x00, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2F, 0x65, 0x78, 0x64, 0x65, 0x74, 0x2E, 0x64, 0x61, 0x74, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x53, 0x63, 0x61, 0x6E, 0x3A, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6C, 0x65, 0x4E, 0x6F, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x3A, 0x54, 0x31, 0x42, 0x75, 0x66, 0x28, 0x25, 0x64, 0x29, 0x2C, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x2C, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x25, 0x64, 0x2E, 0x00, 0x00, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2F, 0x65, 0x78, 0x72, 0x2E, 0x73, 0x61, 0x76, 0x00, 0x00, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x53, 0x63, 0x61, 0x6E, 0x3A, 0x54, 0x32, 0x42, 0x75, 0x66, 0x3A, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x2C, 0x6C, 0x65, 0x6E, 0x3A, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x3A, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x3A, 0x61, 0x64, 0x64, 0x72, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x2C, 0x6C, 0x65, 0x6E, 0x3A, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x3A, 0x25, 0x64, 0x42, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2E, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x3A, 0x73, 0x63, 0x61, 0x6E, 0x20, 0x73, 0x6B, 0x69, 0x70, 0x70, 0x65, 0x64, 0x21, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x3A, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x2C, 0x20, 0x65, 0x6E, 0x64, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x00, 0x00, 0x00, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x3A, 0x54, 0x31, 0x42, 0x55, 0x46, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x00, 0x00, 0x65, 0x78, 0x52, 0x61, 0x6D, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x3A, 0x54, 0x32, 0x42, 0x55, 0x46, 0x3A, 0x30, 0x78, 0x25, 0x78, 0x00, 0x00, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2F, 0x65, 0x78, 0x72, 0x2E, 0x63, 0x61, 0x63, 0x00, 0x00, 0x00, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x3A, 0x66, 0x69, 0x6C, 0x65, 0x3A, 0x25, 0x73, 0x2C, 0x6C, 0x69, 0x6E, 0x65, 0x3A, 0x25, 0x64, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x6D, 0x72, 0x63, 0x5F, 0x73, 0x61, 0x66, 0x65, 0x53, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, 0x77, 0x72, 0x69, 0x74, 0x65, 0x00, 0x00, 0x00, 0x6D, 0x72, 0x63, 0x5F, 0x73, 0x61, 0x66, 0x65, 0x53, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, 0x72, 0x65, 0x61, 0x64, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2E, 0x00, 0x00, 0x00, 0x41, 0x62, 0x6E, 0x6F, 0x72, 0x6D, 0x61, 0x6C, 0x20, 0x74, 0x65, 0x72, 0x6D, 0x69, 0x6E, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x65, 0x74, 0x69, 0x63, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x00, 0x49, 0x6C, 0x6C, 0x65, 0x67, 0x61, 0x6C, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x6C, 0x6C, 0x65, 0x67, 0x61, 0x6C, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x65, 0x72, 0x6D, 0x69, 0x6E, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x63, 0x6B, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x63, 0x61, 0x6E, 0x27, 0x74, 0x20, 0x6F, 0x70, 0x65, 0x6E, 0x3A, 0x20, 0x00, 0x4F, 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x68, 0x65, 0x61, 0x70, 0x20, 0x6D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x6C, 0x20, 0x31, 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, 0x2D, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x6C, 0x20, 0x32, 0x00, 0x00, 0x50, 0x75, 0x72, 0x65, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6C, 0x20, 0x66, 0x6E, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x65, 0x64, 0x00, 0x43, 0x2B, 0x2B, 0x20, 0x6C, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

	public struct rb_root
    {
		public rb_node* rb_node;
	}

	public static rb_root root=new rb_root ();
	public static rb_root* rootP;
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define BRIDGE_FUNC_MAP(offset, mapType, field, init, func, extraData) { #field, offset, mapType, init, func, extraData }

	public static void bridge(uc_engine uc, uc_mem_type type, ulong address)
	{
		fixed (rb_root* roots = &root)
		{
			uIntMap* mobj = uIntMap_search(roots, (uint)address);
			if (mobj != null)
			{
				//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
				BridgeMap* obj = (BridgeMap*)mobj->data;
				
                if (obj->type == BridgeMapType.MAP_FUNC)
				{
					if (obj->fn == null)
					{
						Console.Write("!!! {0}() Not yet implemented function !!! \n", obj->name);
						Environment.Exit(1);
						return;
					}


                    try
                    {
					BridgeCB b=Marshal.GetDelegateForFunctionPointer<BridgeCB>(obj->fn);
                    b(*obj, uc);

                    }
                    catch(Exception e)
                    {
                        br__mr_c_function_new(*obj, uc);
                    }

					uint _lr;
					uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_LR, out _lr);
					uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_PC, _lr);
					return;
				}
				//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
				//ORIGINAL LINE: printf("!!! unregister function at 0x%" +PRIx64+ " !!! \n", address);
				Console.Write("!!! unregister function at 0x% +PRIx64+  !!! \n", address);
			}
		}
	}
    // clang-format on
    static uint MR_TABLE_ADDRESS = (uint)DefineConstants.BRIDGE_TABLE_ADDRESS;
    static uint MR_C_FUNCTION_ADDRESS = MR_TABLE_ADDRESS + DefineConstants.MR_TABLE_SIZE;
    static uint DSM_REQUIRE_FUNCS_ADDRESS=MR_C_FUNCTION_ADDRESS +  DefineConstants.MR_C_FUNCTION_SIZE;
    static uint END_ADDRESS = DSM_REQUIRE_FUNCS_ADDRESS + DefineConstants.DSM_REQUIRE_FUNCS_SIZE;

    public static uc_err bridge_init(uc_engine uc)
	{
		uc_err err = new uc_err();
        //long size = (((DefineConstants.BRIDGE_TABLE_ADDRESS + DefineConstants.MR_TABLE_SIZE)
        //          + DefineConstants.MR_C_FUNCTION_SIZE) + DefineConstants.DSM_REQUIRE_FUNCS_SIZE)
        //          - ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE);
        uint size = END_ADDRESS - (uint)DefineConstants.BRIDGE_TABLE_ADDRESS;
        Console.Write("[bridge_init]startAddr: 0x{0:X}, endAddr: 0x{1:X}, size: 0x{2:X}\n",
            ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE),
            (((DefineConstants.BRIDGE_TABLE_ADDRESS + DefineConstants.MR_TABLE_SIZE) + 
            DefineConstants.MR_C_FUNCTION_SIZE) + DefineConstants.DSM_REQUIRE_FUNCS_SIZE),
            size);
		Console.Write("[bridge_init]MR_TABLE_ADDRESS: 0x{0:X}\n", ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE));
		Console.Write("[bridge_init]MR_C_FUNCTION_ADDRESS: 0x{0:X}\n", (((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE));
		Console.Write("[bridge_init]DSM_REQUIRE_FUNCS_ADDRESS: 0x{0:X}\n", ((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE) + DefineConstants.MR_C_FUNCTION_SIZE));
		if (size > DefineConstants.BRIDGE_TABLE_SIZE)
		{
			Console.Write("error: size[{0:D}] > BRIDGE_TABLE_SIZE[{1:D}]\n", size, DefineConstants.BRIDGE_TABLE_SIZE);
			Environment.Exit(1);
		}

		// 加载预编译的包含有纯C语言实现函数的机器码指令数据，由mrc/baseLib项目生成的mrp中提取
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'extern' variable declarations are not required in C#:
		//	extern byte baseLib_cfunction_ext[18524];
		baseLib_cfunction_ext_mem = toMrpMemAddr(my_mallocExt((uint)baseLib_cfunction_ext.Length));
		err = uc_mem_write(uc, baseLib_cfunction_ext_mem, baseLib_cfunction_ext,baseLib_cfunction_ext.Length);
		if (err != 0)
		{
			return err;
		}

		long v = ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: The following line was determined to be a copy constructor call - this should be verified and a copy constructor should be created if it does not yet exist:
		//ORIGINAL LINE: hooks_init(uc, mr_table_funcMap, (sizeof(mr_table_funcMap) / sizeof((mr_table_funcMap)[0])), ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE));
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: This 'sizeof' ratio was replaced with a direct reference to the array length:
		hooks_init(uc, mr_table_funcMap, (mr_table_funcMap.Length), ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE));
		err = uc_mem_write(uc, DefineConstants.CODE_ADDRESS, &v, 4);
		if (err != 0)
		{
			return err;
		}

		v = (((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: The following line was determined to be a copy constructor call - this should be verified and a copy constructor should be created if it does not yet exist:
		//ORIGINAL LINE: hooks_init(uc, mr_c_function_funcMap, (sizeof(mr_c_function_funcMap) / sizeof((mr_c_function_funcMap)[0])), (((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE));
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: This 'sizeof' ratio was replaced with a direct reference to the array length:
		hooks_init(uc, mr_c_function_funcMap, (mr_c_function_funcMap.Length), (((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE));
		err = uc_mem_write(uc, DefineConstants.CODE_ADDRESS + 4, &v, 4);
		if (err != 0)
		{
			return err;
		}

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: The following line was determined to be a copy constructor call - this should be verified and a copy constructor should be created if it does not yet exist:
		//ORIGINAL LINE: hooks_init(uc, dsm_require_funcs_funcMap, (sizeof(dsm_require_funcs_funcMap) / sizeof((dsm_require_funcs_funcMap)[0])), ((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE) + DefineConstants.MR_C_FUNCTION_SIZE));
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: This 'sizeof' ratio was replaced with a direct reference to the array length:
		hooks_init(uc, dsm_require_funcs_funcMap, (dsm_require_funcs_funcMap.Length), ((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE) + DefineConstants.MR_C_FUNCTION_SIZE));

		mr_c_event = (_mr_c_event_st*)my_mallocExt((uint)sizeof(_mr_c_event_st));
		tsf_init(DefineConstants.SCREEN_WIDTH, DefineConstants.SCREEN_HEIGHT);

		return uc_err.UC_ERR_OK;
	}

	// 对应mrp中的几个入口函数
	public static uint bridge_mr_init(uc_engine uc)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_init() ------------------------------------------------ \n");
		// mr_helper(&cfunction_table, 0, NULL, 0, NULL, NULL);
		uint ret = bridge_mr_helper(uc, 0, 0, 0);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_init() done.\n");
		return ret;
	}

	// 恢复应用
	public static uint bridge_mr_resumeApp(uc_engine uc)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_resumeApp() ------------------------------------------------ \n");
		// return mr_helper(&cfunction_table, 5, NULL, 0, NULL, NULL);
		uint ret = bridge_mr_helper(uc, 5, 0, 0);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_resumeApp() done.\n");
		return ret;
	}

	// 暂停应用
	public static uint bridge_mr_pauseApp(uc_engine uc)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_pauseApp() ------------------------------------------------ \n");
		// return mr_helper(&cfunction_table, 4, NULL, 0, NULL, NULL);
		uint ret = bridge_mr_helper(uc, 4, 0, 0);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_pauseApp() done.\n");
		return ret;
	}

	// 事件进行处理
	public static uint bridge_mr_event(uc_engine uc, int code, int param0, int param1)
	{
		// return mr_helper(&cfunction_table, 1, (uint8 *)input, sizeof(input), NULL, NULL);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_event() ------------------------------------------------ \n");
		mr_c_event->code = code;
		mr_c_event->param0 = param0;
		mr_c_event->param1 = param1;
		uint ret = bridge_mr_helper(uc, 1, toMrpMemAddr(mr_c_event), (uint)sizeof(_mr_c_event_st));
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("bridge_mr_event() done.\n");
		return ret;
	}

	public static int bridge_dsm_init(uc_engine uc, long addr)
	{
		if (pthread_mutex_init(mutex, null) != 0)
		{
			perror("mutex init fail");
			Environment.Exit(1);
		}
		if (pthread_mutex_lock(mutex) != 0)
		{
			perror("mutex lock fail");
			Environment.Exit(1);
		}

		long v = ((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE) + DefineConstants.MR_C_FUNCTION_SIZE);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, v);

		// mr_c_function.start_of_ER_RW 写入r9(SB)，指向的内存是用来存放全局变量的
		v = *(uint*)getMrpMemPtr((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE));
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_SB, v);
		Console.Write("vmrp start_of_ER_RW:0x{0:X}\n", v);

		runCode(uc, addr, DefineConstants.CODE_ADDRESS, false);

		// 返回值，DSM_EXPORT_FUNCS指针
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out dsm_export_funcs);

		v = (uint)bridge_dsm_version(uc);

		if (pthread_mutex_unlock(mutex) != 0)
		{
			perror("mutex unlock fail");
			Environment.Exit(1);
		}
		if (v == DefineConstants.VMRP_VER)
		{
			return DefineConstants.MR_SUCCESS;
		}
		else
		{
			Console.Write("warning: bridge_dsm_version:{0:D} != {1:D}\n", v, DefineConstants.VMRP_VER);
		}
		return DefineConstants.MR_FAILED;
	}
	public static uint bridge_dsm_mr_start_dsm(uc_engine uc, ref string filename, ref string ext, string entry)
	{
		if (pthread_mutex_lock(mutex) != 0)
		{
			perror("mutex lock fail");
			Environment.Exit(1);
		}
		// int32 (*mr_start_dsm)(char *filename, char *ext, char *entry); // 0x04
		uint addr = *((uint*)getMrpMemPtr(dsm_export_funcs + 0x04));
		long p0;
		long p1;
		long p2 = 0;

		Console.Write("dsm_mr_start_dsm addr:0x{0:X} ('{1}','{2}','{3}')\n", addr, filename, ext, entry);
		p0 = copyStrToMrp( filename);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, p0);

		p1 = copyStrToMrp( ext);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R1, p1);

		if (entry != null)
		{
			p2 = copyStrToMrp( entry);
		}
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R2, p2);

		runCode(uc, addr, DefineConstants.CODE_ADDRESS, false);
		my_freeExt(getMrpMemPtr(p0));
		my_freeExt(getMrpMemPtr(p1));
		if (entry != null)
		{
			my_freeExt(getMrpMemPtr(p2));
		}

		uint v;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out v);
		if (pthread_mutex_unlock(mutex) != 0)
		{
			perror("mutex unlock fail");
			Environment.Exit(1);
		}
		return (uint)v;
	}
	public static int bridge_dsm_mr_pauseApp(uc_engine uc)
	{
		if (pthread_mutex_lock(mutex) != 0)
		{
			perror("mutex lock fail");
			Environment.Exit(1);
		}
		//     int32 (*mr_pauseApp)(void); // 0x08
		uint addr = (uint)getMrpMemPtr(dsm_export_funcs + 0x08);
		runCode(uc, addr, DefineConstants.CODE_ADDRESS, false);
		uint v;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out v);
		if (pthread_mutex_unlock(mutex) != 0)
		{
			perror("mutex unlock fail");
			Environment.Exit(1);
		}
		return (int)v;
	}
	public static int bridge_dsm_mr_resumeApp(uc_engine uc)
	{
		if (pthread_mutex_lock(mutex) != 0)
		{
			perror("mutex lock fail");
			Environment.Exit(1);
		}
		//     int32 (*mr_resumeApp)(void); // 0x0c
		uint addr = (uint)getMrpMemPtr(dsm_export_funcs + 0x0c);
		runCode(uc, addr, DefineConstants.CODE_ADDRESS, false);
		uint v;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out v);
		if (pthread_mutex_unlock(mutex) != 0)
		{
			perror("mutex unlock fail");
			Environment.Exit(1);
		}
		return (int)v;
	}
	public static int bridge_dsm_mr_timer(uc_engine uc)
	{
		if (pthread_mutex_lock(mutex) != 0)
		{
			perror("mutex lock fail");
			Environment.Exit(1);
		}
		//     int32 (*mr_timer)(void); // 0x10
		uint addr = (uint)getMrpMemPtr(dsm_export_funcs + 0x10);
		runCode(uc, addr, DefineConstants.CODE_ADDRESS, false);
		uint v;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out v);
		if (pthread_mutex_unlock(mutex) != 0)
		{
			perror("mutex unlock fail");
			Environment.Exit(1);
		}
		return (int)v;
	}
	public static int bridge_dsm_mr_event(uc_engine uc, int code, int p1, int p2)
	{
		if (pthread_mutex_lock(mutex) != 0)
		{
			perror("mutex lock fail");
			Environment.Exit(1);
		}
		//     int32 (*mr_event)(int16 type, int32 param1, int32 param2); // 0x14
		uint addr = (uint)getMrpMemPtr(dsm_export_funcs + 0x14);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, code);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R1, p1);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R2, p2);

		runCode(uc, addr, DefineConstants.CODE_ADDRESS, false);
		uint v;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out v);
		if (pthread_mutex_unlock(mutex) != 0)
		{
			perror("mutex unlock fail");
			Environment.Exit(1);
		}
		return (int)v;
	}




	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TS_FONT_GET_LINE(i) (((unsigned int)((i)&0xFFF00000)) >> 20)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TS_FONT_GET_OFF(i) ((unsigned int)((i)&0x000FFFFF))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STACK_ADDRESS (CODE_ADDRESS + CODE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define BRIDGE_TABLE_ADDRESS (STACK_ADDRESS + STACK_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MEMORY_MANAGER_ADDRESS (BRIDGE_TABLE_ADDRESS + BRIDGE_TABLE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_ADDRESS (MEMORY_MANAGER_ADDRESS + MEMORY_MANAGER_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT * 2)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define START_ADDRESS CODE_ADDRESS
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STOP_ADDRESS (SCREEN_BUF_ADDRESS + SCREEN_BUF_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TOTAL_MEMORY (STOP_ADDRESS - START_ADDRESS)

#if __EMSCRIPTEN__
#endif
	//////////////////////////////////////////////////////////////////////////////////////////
#if LOG
#undef LOG
#endif

#if DEBUG
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define LOG(format, ...) printf("   -> bridge: " format, ##__VA_ARGS__)
//#define LOG
#else
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define LOG(format, ...)
#define LOG
#endif

	internal static _mr_c_event_st* mr_c_event; // 用于mrc_event参数传递的内存

	internal static long mr_helper_addr; //mrc_extHelper()函数的地址
	internal static long baseLib_cfunction_ext_mem;

	// data ////////////////////////////////////////////////////////////////////////////////////////

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_screen_h_init(BridgeMap o, uc_engine uc, uint addr)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("br_%s_init() 0x%X[%u]\n", o.name, addr,(uint) addr);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: uint *mr_screen_h = my_mallocExt(4);
		uint* mr_screen_h =(uint*) my_mallocExt(4);
		*mr_screen_h = DefineConstants.SCREEN_HEIGHT;
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: uint *p = getMrpMemPtr(addr);
		uint* p = (uint*)getMrpMemPtr(addr);
		*p = toMrpMemAddr(mr_screen_h);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_screen_w_init(BridgeMap o, uc_engine uc, uint addr)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("br_{0}_init() 0x{1:X}[{2:D}]\n", o.name, addr,(uint) addr);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: uint *mr_screen_w = my_mallocExt(4);
		uint* mr_screen_w =(uint*) my_mallocExt(4);
		*mr_screen_w = DefineConstants.SCREEN_WIDTH;
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: uint *p = getMrpMemPtr(addr);
		uint* p = (uint*)getMrpMemPtr(addr);
		*p = toMrpMemAddr(mr_screen_w);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_screenBuf_init(BridgeMap o, uc_engine uc, uint addr)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("br_{0}_init() 0x{1:X}[{2:D}]\n", o.name, addr, (uint)addr);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: uint *mr_screenBuf = my_mallocExt(4);
		uint* mr_screenBuf = (uint*) my_mallocExt(4);
		*mr_screenBuf = (uint)((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: uint *p = getMrpMemPtr(addr);
		uint* p = (uint*)getMrpMemPtr(addr);
		*p = toMrpMemAddr(mr_screenBuf);
	}
	// func ////////////////////////////////////////////////////////////////////////////////////////

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br__mr_c_function_new(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T__mr_c_function_new)(MR_C_FUNCTION f, int32 len);
		uint p_f;
		uint p_len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out p_f);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out p_len);
		//Console.Write("ext call {0}(0x{1:X}[{2:D}], 0x{3:X}[{4:D}])\n", (sbyte*)o.name, p_f, p_f, p_len, p_len);
		Console.Write("ext call {0}(0x{1:X}[{2:D}], 0x{3:X}[{4:D}])\n","f", p_f, p_f, p_len, p_len);
		dumpREG(uc);
		mr_helper_addr = p_f;
		Console.Write("mrc_extHelper() addr:0x{0:X}\n", mr_helper_addr);
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_malloc(BridgeMap o, uc_engine uc)
	{
		// typedef void* (*T_mr_malloc)(uint32 len);
		uint len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out len);
		void * p = my_mallocExt(len);
		if (p != null)
		{
			long ret = toMrpMemAddr(p);
			//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
			LOG("ext call {0} 0x{1:X}[{2:D}] ret=0x{3:X}[{4:D}]\n", o.name, len, len, (uint)ret, (uint)ret);
			{
				long _v = ret;
				uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
			};
			return;
		}
		{
			uint _v = 0;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_free(BridgeMap o, uc_engine uc)
	{
		// typedef void  (*T_mr_free)(void* p, uint32 len);
		uint p;
		uint len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out p);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out len);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X[%u], 0x%X[%u])\n", o.name, p, p, len, len);
		my_freeExt(getMrpMemPtr(p));
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br__mr_TestCom(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T__mr_TestCom)(int32 L, int input0, int input1);
		uint L;
		uint input0;
		uint input1;

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out L);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out input0);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out input1);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X[%u], 0x%X[%u], 0x%X[%u])\n", o.name, L, L, input0, input0, input1, input1);
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	internal static void setPixel(uint x, uint y, ushort color, object userData)
	{
		if (x < 0 || y < 0 || x >= DefineConstants.SCREEN_WIDTH || y >= DefineConstants.SCREEN_HEIGHT)
		{
			return;
		}
		*(screenBuf + (x + DefineConstants.SCREEN_WIDTH * y)) = color;
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br__DrawPoint(BridgeMap o, uc_engine uc)
	{
		// typedef  void (*T__DrawPoint)(int16 x, int16 y, uint16 nativecolor);
		uint x;
		uint y;
		uint nativecolor;

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out x);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out y);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out nativecolor);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X, 0x%X, 0x%X)\n", o.name, x, y, nativecolor);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s([%u], [%u], [%u])\n", o.name, x, y, nativecolor);
		setPixel(x, y,(ushort) nativecolor, uc);
	}

	// 实际上mrc_clearScreen()也是调用的这个方法
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_DrawRect(BridgeMap o, uc_engine uc)
	{
		// typedef  void (*T_DrawRect)(int16 x, int16 y, int16 w, int16 h, uint8 r, uint8 g, uint8 b);
		uint x;
		uint y;
		uint w;
		uint h;
		uint r;
		uint g;
		uint b;
		// 前四个参数是通过寄存器传递
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out x);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out y);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out w);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out h);

		// 后面的参数通过栈传递（注意内存对齐遵循ATPCS）
		uint sp;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_SP, out sp);
		uc_mem_read(uc, sp, out r, 4);
		uc_mem_read(uc, sp + 4, out g, 4);
		uc_mem_read(uc, sp + 8, out b, 4);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d, %d, %d, %d, %u, %u, %u)\n", o.name, x, y, w, h, r, g, b);
		ushort color = (ushort)(((uint)(r >> 3) << 11) | ((uint)(g >> 2) << 5) | ((uint)(b >> 3)));

		for (uint i = 0; i < w; i++)
		{
			for (uint j = 0; j < h; j++)
			{
				setPixel(x + i, y + j, color, uc);
			}
		}
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br__DrawText(BridgeMap o, uc_engine uc)
	{
		// typedef  int32 (*T__DrawText)(char* pcText, int16 x, int16 y, uint8 r, uint8 g, uint8 b, int is_unicode, uint16 font);
		uint pcText=0;
		uint x=0;
		uint y=0;
		uint r=0;
		uint g=0;
		uint b=0;
		uint is_unicode=0;
		uint font=0;

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out pcText);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out x);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out y);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out r);

		uint sp=0;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_SP,out sp);
		uc_mem_read(uc, sp,out g, 4);
		uc_mem_read(uc, sp + 4, out b, 4);
		uc_mem_read(uc, sp + 8, out is_unicode, 4);
		uc_mem_read(uc, sp + 12, out font, 4);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *str = getMrpMemPtr(pcText);
		byte* str = (byte*)getMrpMemPtr(pcText);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X[\"%s\"], %d, %d, %u, %u, %u, %d, %u)\n", o.name, pcText, str, x, y, r, g, b, is_unicode, font);
		if (is_unicode != 0)
		{
			tsf_drawText(str, (short)x, (short)y, (ushort)(((uint)(r >> 3) << 11) | ((uint)(g >> 2) << 5) | ((uint)(b >> 3))), uc);
		}
		else
		{
			//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
			//ORIGINAL LINE: byte *out = (byte *)gbToUCS2BE((byte *)str, null);
			uint size = 0;
			byte* @out = (byte*)gbToUCS2BE(str,out size);
			tsf_drawText( @out, (short)x, (short)y, (ushort)(((uint)(r >> 3) << 11) | ((uint)(g >> 2) << 5) | ((uint)(b >> 3))), uc);
			//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
			free(@out);
		}
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

    

    // 实际上mrc_refreshScreen()是调用的这个方法
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
    internal static void br_mr_drawBitmap(BridgeMap o, uc_engine uc)
	{
		// typedef void (*T_mr_drawBitmap)(uint16* bmp, int16 x, int16 y, uint16 w, uint16 h);
		uint bmp;
		uint x;
		uint y;
		uint w;
		uint h;

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out bmp);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out x);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out y);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out w);

		uint sp;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_SP, out sp);
		uc_mem_read(uc, sp, out h, 4);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X, %d, %d, %u, %u)\n", o.name, bmp, x, y, w, h);
		guiDrawBitmap((ushort *)getMrpMemPtr(bmp),(int) x, (int)y, (int)w, (int)h);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_open(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_open)(const char* filename,  uint32 mode);
		uint filename;
		uint mode;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out filename);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out mode);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *filenameStr = getMrpMemPtr(filename);
		sbyte* filenameStr = (sbyte*)getMrpMemPtr(filename);
		int ret = my_open(filenameStr, mode);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X[%s], 0x%X): %d\n", o.name, filename,(uint)( filenameStr), mode,(uint) ret);
		{
			int _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_close(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_close)(int32 f);
		int f;
		int ret;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out f);
		ret = my_close(f);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d): %d\n", o.name, f, (uint)ret);
		{
			int _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_write(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_write)(int32 f,void *p,uint32 l);
		uint f;
		uint p;
		int l;
		int ret;

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out f);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out p);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out l);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X, 0x%X, 0x%X)\n", o.name, f, p, (uint)l);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s([%u], [%u], [%u])\n", o.name, f, p, (uint)l);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *buf = malloc(l);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		sbyte* buf = (sbyte*)malloc(l);
		uc_mem_read(uc, p, buf, l);
		ret = my_write((int)f, buf, (uint)l);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
		free(buf);

		{
			int _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_read(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_read)(int32 f,void *p,uint32 l);
		uint f;
		uint p;
		uint l;
		int ret;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out f);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out p);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out l);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *buf = getMrpMemPtr(p);
		sbyte* buf = (sbyte * )getMrpMemPtr(p);
		ret = my_read((int)f, buf, l);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d, 0x%X, %u): %d\n", o.name, f, p, l, (uint)ret);
		{
			int _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_seek(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_seek)(int32 f, int32 pos, int method);
		uint f;
		uint pos;
		uint method;
		uint ret;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out f);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out pos);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out method);
		ret = my_seek(f, pos, method);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d, %d, 0x%X): %d\n", o.name, f, pos, method, ret);
		{
			uint _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_getLen(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_getLen)(const char* filename);
		uint filename;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out filename);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *filenameStr = getMrpMemPtr(filename);
		sbyte* filenameStr =(sbyte *) getMrpMemPtr(filename);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%s)\n", o.name, *filenameStr);
		{
			int _v = my_getLen(new string( filenameStr));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_remove(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_remove)(const char* filename);
		uint filename;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out filename);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *filenameStr = getMrpMemPtr(filename);
		sbyte* filenameStr = (sbyte*)getMrpMemPtr(filename);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%s)\n", o.name, *filenameStr);
		{
			int _v = my_remove(new string(filenameStr));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_rename(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_rename)(const char* oldname, const char* newname);
		uint oldname;
		uint newname;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out oldname);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out newname);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *oldnameStr = getMrpMemPtr(oldname);
		sbyte* oldnameStr = (sbyte*)getMrpMemPtr(oldname);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *newnameStr = getMrpMemPtr(newname);
		sbyte* newnameStr = (sbyte*)getMrpMemPtr(newname);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%s, %s)\n", o.name, *oldnameStr,(uint)* newnameStr);
		{
			int _v = my_rename(new string ( oldnameStr),new string ( newnameStr));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_mkDir(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_mkDir)(const char* name);
		uint name;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out name);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *nameStr = getMrpMemPtr(name);
		sbyte* nameStr = (sbyte*)getMrpMemPtr(name);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%s)\n", o.name, *nameStr);
		{
			int _v = my_mkDir(nameStr);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_rmDir(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_rmDir)(const char* name);
		uint name;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out name);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *nameStr = getMrpMemPtr(name);
		sbyte* nameStr = (sbyte *)getMrpMemPtr(name);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%s)\n", o.name, *nameStr);
		{
			int _v = my_rmDir(new string( nameStr));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_atoi(BridgeMap o, uc_engine uc)
	{
		// typedef int (*T_atoi)(const char * nptr);
		uint nptr;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out nptr);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *str = getMrpMemPtr(nptr);
		sbyte* str =(sbyte *) getMrpMemPtr(nptr);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X[%s])\n", o.name, nptr, (uint)*str);
		{
			int _v = Convert.ToInt32(str);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}


    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
    internal static void br_mr_exit(BridgeMap o, uc_engine uc)
	{
		// typedef int32 (*T_mr_exit)(void);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("##### ext call %s()\n", o.name);
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_getScreenInfo(BridgeMap o, uc_engine uc)
	{
		// int32 mr_getScreenInfo(mr_screeninfo * s) ;
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("##### ext call %s()\n", o.name);

		uint addr;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out addr);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow declaring types within methods:
		//	struct
		//	{
		//		uint width;
		//		uint height;
		//		uint bit;
		//	}
		s* ss = (s*)getMrpMemPtr(addr);

		if (ss!=null)
		{
			ss->width = DefineConstants.SCREEN_WIDTH;
			ss->height = DefineConstants.SCREEN_HEIGHT;
			ss->bit = 16;
		}
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//////////////////////////////////////////////////////////////////////////////////////////
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_baseLib_init(BridgeMap o, uc_engine uc, uint addr)
	{
		long v = o.extraData + baseLib_cfunction_ext_mem + 8; // ext文件+8才是mr_c_function_load的地址，所有函数偏移量都是基于这个地址
															  //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("br_baseLib_{0}_init() addr:0x{1:X}[{2:D}] v=0x{3:X}[{4:D}]\n", o.name, addr,(uint) addr, (uint)v, (uint)v);
		uc_mem_write(uc, addr, &v, 4);
	}
	//////////////////////////////////////////////////////////////////////////////////////////

	internal static ulong uptime_ms;
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_get_uptime_ms_init(BridgeMap o, uc_engine uc, uint addr)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("br_{0}_init() 0x{1:X}[{2:D}]\n", o.name, addr,(uint) addr);
		uptime_ms = (ulong)get_uptime_ms();
		uc_mem_write(uc, addr, &addr, 4);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_get_uptime_ms(BridgeMap o, uc_engine uc)
	{
		// uint32 (*get_uptime_ms)(void);
		uint ret = (uint)((ulong)get_uptime_ms() - uptime_ms);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(): 0x%X[%u]\n", o.name, ret, ret);
		{
			uint _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_log(BridgeMap o, uc_engine uc)
	{
		// void (*log)(char *msg);
		uint msg;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out msg);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *str = (sbyte *)getMrpMemPtr(msg);
		sbyte* str = (sbyte *)getMrpMemPtr(msg);
		// LOG("ext call %s('%s')\n", o->name, str);
		Console.WriteLine(str);
		// dumpREG(uc);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mem_get(BridgeMap o, uc_engine uc)
	{
		// int32 (*mem_get)(char **mem_base, uint32 *mem_len);
		uint mem_base;
		uint mem_len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out mem_base);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out mem_len);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);

		uint len = 1024 * 1024 * 2;
		long buffer = toMrpMemAddr(my_mallocExt(len));

		Console.Write("br_mem_get base=0x{0:X} len={1:D}({2:D} kb) =================\n", buffer, len, len / 1024);

		// *mem_base = buffer;
		uc_mem_write(uc, mem_base, &buffer, 4);
		// *mem_len = len;
		uc_mem_write(uc, mem_len, &len, 4);

		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mem_free(BridgeMap o, uc_engine uc)
	{
		// int32 (*mem_free)(char *mem, uint32 mem_len);
		uint mem;
		uint mem_len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out mem);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out mem_len);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(0x%X, 0x%X)\n", o.name, mem, mem_len);
		my_freeExt(getMrpMemPtr(mem));
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_timerStop(BridgeMap o, uc_engine uc)
	{
		// int32 (*timerStop)(void);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		{
			int _v = timerStop();
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_timerStart(BridgeMap o, uc_engine uc)
	{
		// int32 (*timerStart)(uint16 t);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int t;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out t);
		{
			int _v = timerStart((ushort)t);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_test(BridgeMap o, uc_engine uc)
	{
		// void (*test)(void);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_exit(BridgeMap o, uc_engine uc)
	{
		// void (*exit)(void);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		Console.Write("mythroad exit.\n");
		Environment.Exit(0);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_srand(BridgeMap o, uc_engine uc)
	{
		// void (*srand)(uint32 seed);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		uint seed;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out seed);
		RandomNumbers.Seed((int)seed);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_rand(BridgeMap o, uc_engine uc)
	{
		// int32 (*rand)(void);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		{
			int _v = RandomNumbers.NextNumber();
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_sleep(BridgeMap o, uc_engine uc)
	{
		// int32 (*sleep)(uint32 ms);
		uint ms;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out ms);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d)\n", o.name, ms);
		usleep(ms * 1000); //注意 usleep 传的是 微秒 ，所以要 *1000
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_info(BridgeMap o, uc_engine uc)
	{
		// int32 (*info)(const char *filename);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		uint filename;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out filename);
		{
			uint _v = my_info((sbyte*)getMrpMemPtr(filename));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		}
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_opendir(BridgeMap o, uc_engine uc)
	{
		// int32 (*opendir)(const char *name);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		uint name;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out name);
		{
			int _v = my_opendir(new string ((sbyte *) getMrpMemPtr(name)));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		}
	}

	internal static sbyte * readdirSharedMem; // 文件名的共享内存
											 //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_readdir_init(BridgeMap o, uc_engine uc, uint addr)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("br_{0}_init() 0x{1:X}[{2:D}]\n", o.name, addr, (uint)addr);
		readdirSharedMem = (sbyte *)my_mallocExt(DefineConstants.READDIR_SHARED_MEM_SIZE);
		readdirSharedMem [DefineConstants.READDIR_SHARED_MEM_SIZE - 1]= (sbyte )('\0');
		uc_mem_write(uc, addr, &addr, 4);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_readdir(BridgeMap o, uc_engine uc)
	{
		// char *(*readdir)(int32 f);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int f;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out f);

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
		//ORIGINAL LINE: sbyte *r = my_readdir(f);
		sbyte* str = my_readdir(f);
		string r = new string(str);
		if (r != null)
		{
			readdirSharedMem =getStringPtr( r.Substring(0, DefineConstants.READDIR_SHARED_MEM_SIZE - 1));
			{
				long _v = toMrpMemAddr(readdirSharedMem);
				uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
			};
		}
		else
		{
			{
				uint _v = 0;
				uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
			};
		}
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_closedir(BridgeMap o, uc_engine uc)
	{
		// int32 (*closedir)(int32 f);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int f;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out f);
		{
			uint _v = my_closedir(f);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_getDatetime(BridgeMap o, uc_engine uc)
	{
		// int32 (*getDatetime)(mr_datetime *datetime);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		uint datetime;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out datetime);
		{
			int _v = getDatetime((mr_datetime *)getMrpMemPtr(datetime));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_initNetwork(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_initNetwork)(MR_INIT_NETWORK_CB cb, const char *mode);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		{
			int _v = my_initNetwork(null, null);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_socket(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_socket)(int32 type, int32 protocol);
		int type;
		int protocol;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out type);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out protocol);
		int ret = my_socket(type, protocol);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(): %d \n", o.name, ret);
		{
			int _v = ret;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_connect(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_connect)(int32 s, int32 ip, uint16 port, int32 type);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int s;
		int ip;
		int port;
		int type;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out s);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out ip);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out port);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out type);
		{
			int _v = my_connect(s, ip, (ushort)port, type);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_closeSocket(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_closeSocket)(int32 s);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int s;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out s);
		{
			int _v = my_closeSocket(s);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_closeNetwork(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_closeNetwork)();
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		{
			int _v = my_closeNetwork();
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_getHostByName(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_getHostByName)(const char *ptr, MR_GET_HOST_CB cb);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		uint name;
		uint cb;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out name);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out cb);
		{
			int _v = my_getHostByName((sbyte*)getMrpMemPtr(name), null);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_send(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_send)(int32 s, const char *buf, int len);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int s;
		uint buf;
		int len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out s);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out buf);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out len);
		{
			int _v = my_send(s, (sbyte*)getMrpMemPtr(buf), len);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_recv(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_recv)(int32 s, char *buf, int len);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int s;
		uint buf;
		int len;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out s);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out buf);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out len);
		{
			int _v = my_recv(s, (sbyte*)getMrpMemPtr(buf), len);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}

	/*
	获取socket connect 状态（主要用于TCP的异步连接） 
	Syntax
	int32 mrc_getSocketState(int32 s); 
	Parameters
	s
	   [IN] 打开的socket句柄，由mrc_socket创建
	
	Return Value
	   MR_SUCCESS ： 连接成功
	   MR_FAILED ： 连接失败
	   MR_WAITING ： 连接中
	   MR_IGNORE ： 不支持该功能
	*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_getSocketState(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_getSocketState)(int32 s);
		int s;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out s);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d)\n", o.name, s);
		{
			uint _v = DefineConstants.MR_IGNORE;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
	}
	public static AnonymousEnum MR_SOUND_TYPE;

	/*
	播放声音数据
	type [IN] 声音数据类型，见MR_SOUND_TYPE定义，此函数支持MR_SOUND_MIDI MR_SOUND_WAV MR_SOUND_MP3 
	data [IN] 声音数据指针
	datalen [IN] 声音数据长度
	loop [IN] 0:单次播放, 1:循环播放
	Return Value MR_SUCCESS 成功 MR_FAILED 失败 
	*/
#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_playSound, (int type, const object * data, uint dataLen, int loop), {return js_playSound(type, data, dataLen, loop);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_playSound(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_playSound)(int type, const void *data, uint32 dataLen, int32 loop);
		int type;
		uint data;
		uint dataLen;
		uint loop;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out type);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out data);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out dataLen);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out loop);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d, 0x%x, %d, %d)\n", o.name, type, data, dataLen, loop);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_playSound(type, getMrpMemPtr(data), dataLen, loop);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	/*
	停止播放声音数据
	type [IN] 声音数据类型，见MR_SOUND_TYPE定义，此函数支持MR_SOUND_MIDI MR_SOUND_WAV MR_SOUND_MP3  
	Return Value MR_SUCCESS 成功 MR_FAILED 失败 
	*/
#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_stopSound, (int type), {return js_stopSound(type);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_stopSound(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_stopSound)(int type);
		int type;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out type);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s(%d)\n", o.name, type);

#if __EMSCRIPTEN__
		{
			uint _v = js_mr_stopSound(type);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_startShake, (int ms), {return js_startShake(ms);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_startShake(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_startShake)(int32 ms);
		int ms;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out ms);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_startShake(ms);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_stopShake, (), {return js_stopShake();});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_stopShake(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_stopShake)();
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_stopShake();
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			uint _v = DefineConstants.MR_SUCCESS;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_dialogCreate(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_dialogCreate)(const char *title, const char *text, int32 type);
		uint title;
		uint text;
		int type;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out title);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out text);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out type);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_dialogCreate(getMrpMemPtr(title), getMrpMemPtr(text), type);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_dialogRelease, (int dialog), {return js_dialogRelease(dialog);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_dialogRelease(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_dialogRelease)(int32 dialog);
		int dialog;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out dialog);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_dialogRelease(dialog);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	/*
	刷新对话框的显示。
	dialog [IN]对话框的句柄
	title [IN]对话框的标题，unicode编码，网络字节序
	text [IN]对话框内容，unicode编码，网络字节序
	type [IN]若type为-1，表示type不变,见定义MR_DIALOG_OK MR_DIALOG_OK_CANCEL MR_DIALOG_CANCEL 
	Return Value MR_SUCCESS 成功 MR_FAILED 失败 
	*/
#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_dialogRefresh, (int dialog, const sbyte * title, const sbyte * text, int type), {return js_dialogRefresh(dialog, title, text, type);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_dialogRefresh(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_dialogRefresh)(int32 dialog, const char *title, const char *text, int32 type);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int dialog;
		int type;
		uint title;
		uint text;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out dialog);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out title);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out text);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out type);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_dialogRefresh(dialog, getMrpMemPtr(title), getMrpMemPtr(text), type);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	/*
	创建一个文本框，并返回文本框句柄
	title [IN]文本框的标题，unicode编码，网络字节序
	text [IN]文本框内容，unicode编码，网络字节序
	type [IN]文本框按键类型,见定义MR_DIALOG_OK MR_DIALOG_OK_CANCEL MR_DIALOG_CANCEL 
	Return Value 正整数 文本框句柄 MR_FAILED 失败 
	Remarks
	   文本框用来显示只读的文字信息。文本框和对话框并没有本质的区别，仅仅是显示方式上的不同，在使用上它们的主要区别是：对话框的内容一般较短，文本框的内容一般较长，
	   对话框一般实现为弹出式的窗口，文本框一般实现为全屏式的窗口。也可能在手机上对话框和文本框使用了相同的方式实现。文本框和对话框的消息参数是一样的。当文本框显示时，
	   如果用户选择了文本框上的某个键，系统将构造Mythroad应用消息，通过mrc_event函数传送给Mythroad 平台，消息类型为MR_DIALOG_EVENT，参数为该按键的ID。
	   "确定"键ID为：MR_DIALOG_KEY_OK；"取消"键ID为：MR_DIALOG_KEY_CANCEL。 
	*/
#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_textCreate, (const sbyte * title, const sbyte * text, int type), {return js_textCreate(title, text, type);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_textCreate(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_textCreate)(const char *title, const char *text, int32 type);
		uint title;
		uint text;
		int type;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out title);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out text);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out type);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_textCreate(getMrpMemPtr(title), getMrpMemPtr(text), type);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_textRelease, (int handle), {return js_textRelease(handle);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_textRelease(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_textRelease)(int32 handle);
		int handle;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out handle);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_textRelease(handle);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_textRefresh, (int handle, const sbyte * title, const sbyte * text), {return js_textRefresh(handle, title, text);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_textRefresh(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_textRefresh)(int32 handle, const char *title, const char *text);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int handle;
		uint title;
		uint text;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out handle);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out title);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out text);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_textRefresh(handle, getMrpMemPtr(title), getMrpMemPtr(text));
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_editCreate(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_editCreate)(const char *title, const char *text, int32 type, int32 max_size);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int type;
		int max_size;
		uint title;
		uint text;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out title);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out text);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out type);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out max_size);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_editCreate(getMrpMemPtr(title), getMrpMemPtr(text), type, max_size);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(int, js_mr_editRelease, (int edit), {return js_editRelease(edit);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_editRelease(BridgeMap o, uc_engine uc)
	{
		// int32 (*mr_editRelease)(int32 edit);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int edit;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out edit);
#if __EMSCRIPTEN__
		{
			uint _v = js_mr_editRelease(edit);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			int _v = DefineConstants.MR_FAILED;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	/*
	获取编辑框内容，unicode编码。调用者若需在编辑框释放后仍然使用编辑框的内容，需要自行保存该内容。该函数需要在编辑框释放之前调用。 
	Return Value 非NULL 编辑框的内容指针，unicode编码, NULL 失败 
	*/
#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EM_JS(const sbyte *, js_mr_editGetText, (int edit), {return js_editGetText(edit);});
#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static void br_mr_editGetText(BridgeMap o, uc_engine uc)
	{
		// const char *(*mr_editGetText)(int32 edit);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The #define macro 'LOG' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		LOG("ext call %s()\n", o.name);
		int edit;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out edit);
#if __EMSCRIPTEN__
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: sbyte *str = (sbyte *)js_mr_editGetText(edit);
		sbyte str = (string)js_mr_editGetText(edit);
		{
			uint _v = toMrpMemAddr(str);
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#else
		{
			uint _v = 0;
			uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, _v);
		};
#endif
	}

	// 偏移量由./mrc/[x]_offsets.c直接从mrp中导出
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static BridgeMap[] mr_table_funcMap =
	{
		new BridgeMap("mr_malloc", 0x0, BridgeMapType.MAP_FUNC, null, br_mr_malloc, 0),
		new BridgeMap("mr_free", 0x4, BridgeMapType.MAP_FUNC,  null, br_mr_free, 0),
		new BridgeMap("mr_realloc", 0x8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("memcpy", 0xC, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x1b90),
		new BridgeMap("memmove", 0x10, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x1bb0),
		new BridgeMap("strcpy", 0x14, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2eac),
		new BridgeMap("strncpy", 0x18, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2f7c),
		new BridgeMap("strcat", 0x1C, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2e48),
		new BridgeMap("strncat", 0x20, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2ee4),
		new BridgeMap("memcmp", 0x24, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x1b5c),
		new BridgeMap("strcmp", 0x28, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2e7c),
		new BridgeMap("strncmp", 0x2C, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2f40),
		new BridgeMap("strcoll", 0x30, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("memchr", 0x34, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x1b30),
		new BridgeMap("memset", 0x38, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x1c00),
		new BridgeMap("strlen", 0x3C, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2ec8),
		new BridgeMap("strstr", 0x40, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2fa8),
		new BridgeMap("sprintf", 0x44, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2e08),
		new BridgeMap("atoi", 0x48, BridgeMapType.MAP_FUNC, null, br_atoi, 0),
		new BridgeMap("strtoul", 0x4C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("rand", 0x50, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("reserve0", 0x54, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("reserve1", 0x58, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("_mr_c_internal_table", 0x5C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("_mr_c_port_table", 0x60, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("_mr_c_function_new", 0x64, BridgeMapType.MAP_FUNC, null, br__mr_c_function_new, 0),
		new BridgeMap("mr_printf", 0x68, BridgeMapType.MAP_FUNC, br_baseLib_init, null, 0x2db4),
		new BridgeMap("mr_mem_get", 0x6C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_mem_free", 0x70, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_drawBitmap", 0x74, BridgeMapType.MAP_FUNC, null, br_mr_drawBitmap, 0),
		new BridgeMap("mr_getCharBitmap", 0x78, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_timerStart", 0x7C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_timerStop", 0x80, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_getTime", 0x84, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_getDatetime", 0x88, BridgeMapType.MAP_FUNC, null, br_getDatetime, 0),
		new BridgeMap("mr_getUserInfo", 0x8C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_sleep", 0x90, BridgeMapType.MAP_FUNC, null, br_sleep, 0),
		new BridgeMap("mr_plat", 0x94, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_platEx", 0x98, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_ferrno", 0x9C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_open", 0xA0, BridgeMapType.MAP_FUNC, null, br_mr_open, 0),
		new BridgeMap("mr_close", 0xA4, BridgeMapType.MAP_FUNC, null, br_mr_close, 0),
		new BridgeMap("mr_info", 0xA8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_write", 0xAC, BridgeMapType.MAP_FUNC, null, br_mr_write, 0),
		new BridgeMap("mr_read", 0xB0, BridgeMapType.MAP_FUNC, null, br_mr_read, 0),
		new BridgeMap("mr_seek", 0xB4, BridgeMapType.MAP_FUNC, null, br_mr_seek, 0),
		new BridgeMap("mr_getLen", 0xB8, BridgeMapType.MAP_FUNC, null, br_mr_getLen, 0),
		new BridgeMap("mr_remove", 0xBC, BridgeMapType.MAP_FUNC, null, br_mr_remove, 0),
		new BridgeMap("mr_rename", 0xC0, BridgeMapType.MAP_FUNC, null, br_mr_rename, 0),
		new BridgeMap("mr_mkDir", 0xC4, BridgeMapType.MAP_FUNC, null, br_mr_mkDir, 0),
		new BridgeMap("mr_rmDir", 0xC8, BridgeMapType.MAP_FUNC, null, br_mr_rmDir, 0),
		new BridgeMap("mr_findStart", 0xCC, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_findGetNext", 0xD0, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_findStop", 0xD4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_exit", 0xD8, BridgeMapType.MAP_FUNC, null, br_mr_exit, 0),
		new BridgeMap("mr_startShake", 0xDC, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_stopShake", 0xE0, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_playSound", 0xE4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_stopSound", 0xE8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_sendSms", 0xEC, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_call", 0xF0, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_getNetworkID", 0xF4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_connectWAP", 0xF8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_menuCreate", 0xFC, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_menuSetItem", 0x100, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_menuShow", 0x104, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("reserve", 0x108, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_menuRelease", 0x10C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_menuRefresh", 0x110, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_dialogCreate", 0x114, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_dialogRelease", 0x118, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_dialogRefresh", 0x11C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_textCreate", 0x120, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_textRelease", 0x124, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_textRefresh", 0x128, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_editCreate", 0x12C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_editRelease", 0x130, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_editGetText", 0x134, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_winCreate", 0x138, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_winRelease", 0x13C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_getScreenInfo", 0x140, BridgeMapType.MAP_FUNC, null, br_mr_getScreenInfo, 0),
		new BridgeMap("mr_initNetwork", 0x144, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_closeNetwork", 0x148, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_getHostByName", 0x14C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_socket", 0x150, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_connect", 0x154, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_closeSocket", 0x158, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_recv", 0x15C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_recvfrom", 0x160, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_send", 0x164, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_sendto", 0x168, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_screenBuf", 0x16C, BridgeMapType.MAP_DATA, br_mr_screenBuf_init, null, 0),
		new BridgeMap("mr_screen_w", 0x170, BridgeMapType.MAP_DATA, br_mr_screen_w_init, null, 0),
		new BridgeMap("mr_screen_h", 0x174, BridgeMapType.MAP_DATA, br_mr_screen_h_init, null, 0),
		new BridgeMap("mr_screen_bit", 0x178, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_bitmap", 0x17C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_tile", 0x180, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_map", 0x184, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_sound", 0x188, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_sprite", 0x18C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("pack_filename", 0x190, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("start_filename", 0x194, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("old_pack_filename", 0x198, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("old_start_filename", 0x19C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_ram_file", 0x1A0, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_ram_file_len", 0x1A4, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_soundOn", 0x1A8, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_shakeOn", 0x1AC, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("LG_mem_base", 0x1B0, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("LG_mem_len", 0x1B4, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("LG_mem_end", 0x1B8, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("LG_mem_left", 0x1BC, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_sms_cfg_buf", 0x1C0, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_md5_init", 0x1C4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_md5_append", 0x1C8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_md5_finish", 0x1CC, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_load_sms_cfg", 0x1D0, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_save_sms_cfg", 0x1D4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_DispUpEx", 0x1D8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_DrawPoint", 0x1DC, BridgeMapType.MAP_FUNC, null, br__DrawPoint, 0),
		new BridgeMap("_DrawBitmap", 0x1E0, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_DrawBitmapEx", 0x1E4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("DrawRect", 0x1E8, BridgeMapType.MAP_FUNC, null, br_DrawRect, 0),
		new BridgeMap("_DrawText", 0x1EC, BridgeMapType.MAP_FUNC, null, br__DrawText, 0),
		new BridgeMap("_BitmapCheck", 0x1F0, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_readFile", 0x1F4, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_wstrlen", 0x1F8, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_registerAPP", 0x1FC, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_DrawTextEx", 0x200, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_EffSetCon", 0x204, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_TestCom", 0x208, BridgeMapType.MAP_FUNC, null, br__mr_TestCom, 0),
		new BridgeMap("_mr_TestCom1", 0x20C, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("c2u", 0x210, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_div", 0x214, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("_mr_mod", 0x218, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("LG_mem_min", 0x21C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("LG_mem_top", 0x220, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_updcrc", 0x224, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("start_fileparameter", 0x228, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_sms_return_flag", 0x22C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_sms_return_val", 0x230, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_unzip", 0x234, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_exit_cb", 0x238, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_exit_cb_data", 0x23C, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_entry", 0x240, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mr_platDrawChar", 0x244, BridgeMapType.MAP_FUNC, null, null, 0)
	};

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static BridgeMap[] mr_c_function_funcMap =
	{
		new BridgeMap("start_of_ER_RW", 0x0, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("ER_RW_Length", 0x4, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("ext_type", 0x8, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("mrc_extChunk", 0xC, BridgeMapType.MAP_DATA, null, null, 0),
		new BridgeMap("stack", 0x10, BridgeMapType.MAP_DATA, null, null, 0)
	};

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static BridgeMap[] dsm_require_funcs_funcMap =
	{
		new BridgeMap("test", 0x0, BridgeMapType.MAP_FUNC, null, br_test, 0),
		new BridgeMap("log", 0x4, BridgeMapType.MAP_FUNC, null, br_log, 0),
		new BridgeMap("exit", 0x8, BridgeMapType.MAP_FUNC, null, br_exit, 0),
		new BridgeMap("srand", 0xc, BridgeMapType.MAP_FUNC, null, br_srand, 0),
		new BridgeMap("rand", 0x10, BridgeMapType.MAP_FUNC, null, br_rand, 0),
		new BridgeMap("mem_get", 0x14, BridgeMapType.MAP_FUNC, null, br_mem_get, 0),
		new BridgeMap("mem_free", 0x18, BridgeMapType.MAP_FUNC, null, br_mem_free, 0),
		new BridgeMap("timerStart", 0x1c, BridgeMapType.MAP_FUNC, null, br_timerStart, 0),
		new BridgeMap("timerStop", 0x20, BridgeMapType.MAP_FUNC, null, br_timerStop, 0),
		new BridgeMap("get_uptime_ms", 0x24, BridgeMapType.MAP_FUNC, br_get_uptime_ms_init, br_get_uptime_ms, 0),
		new BridgeMap("getDatetime", 0x28, BridgeMapType.MAP_FUNC, null, br_getDatetime, 0),
		new BridgeMap("sleep", 0x2c, BridgeMapType.MAP_FUNC, null, br_sleep, 0),
		new BridgeMap("open", 0x30, BridgeMapType.MAP_FUNC, null, br_mr_open, 0),
		new BridgeMap("close", 0x34, BridgeMapType.MAP_FUNC, null, br_mr_close, 0),
		new BridgeMap("read", 0x38, BridgeMapType.MAP_FUNC, null, br_mr_read, 0),
		new BridgeMap("write", 0x3c, BridgeMapType.MAP_FUNC, null, br_mr_write, 0),
		new BridgeMap("seek", 0x40, BridgeMapType.MAP_FUNC, null, br_mr_seek, 0),
		new BridgeMap("info", 0x44, BridgeMapType.MAP_FUNC, null, br_info, 0),
		new BridgeMap("remove", 0x48, BridgeMapType.MAP_FUNC, null, br_mr_remove, 0),
		new BridgeMap("rename", 0x4c, BridgeMapType.MAP_FUNC, null, br_mr_rename, 0),
		new BridgeMap("mkDir", 0x50, BridgeMapType.MAP_FUNC, null, br_mr_mkDir, 0),
		new BridgeMap("rmDir", 0x54, BridgeMapType.MAP_FUNC, null, br_mr_rmDir, 0),
		new BridgeMap("opendir", 0x58, BridgeMapType.MAP_FUNC, null, br_opendir, 0),
		new BridgeMap("readdir", 0x5c, BridgeMapType.MAP_FUNC, br_readdir_init, br_readdir, 0),
		new BridgeMap("closedir", 0x60, BridgeMapType.MAP_FUNC, null, br_closedir, 0),
		new BridgeMap("getLen", 0x64, BridgeMapType.MAP_FUNC, null, br_mr_getLen, 0),
		new BridgeMap("drawBitmap", 0x68, BridgeMapType.MAP_FUNC, null, br_mr_drawBitmap, 0),
		new BridgeMap("mr_initNetwork", 0x6c, BridgeMapType.MAP_FUNC, null, br_mr_initNetwork, 0),
		new BridgeMap("mr_closeNetwork", 0x70, BridgeMapType.MAP_FUNC, null, br_mr_closeNetwork, 0),
		new BridgeMap("mr_getHostByName", 0x74, BridgeMapType.MAP_FUNC, null, br_mr_getHostByName, 0),
		new BridgeMap("mr_socket", 0x78, BridgeMapType.MAP_FUNC, null, br_mr_socket, 0),
		new BridgeMap("mr_connect", 0x7c, BridgeMapType.MAP_FUNC, null, br_mr_connect, 0),
		new BridgeMap("mr_getSocketState", 0x80, BridgeMapType.MAP_FUNC, null, br_mr_getSocketState, 0),
		new BridgeMap("mr_closeSocket", 0x84, BridgeMapType.MAP_FUNC, null, br_mr_closeSocket, 0),
		new BridgeMap("mr_recv", 0x88, BridgeMapType.MAP_FUNC, null, br_mr_recv, 0),
		new BridgeMap("mr_send", 0x8c, BridgeMapType.MAP_FUNC, null, br_mr_send, 0),
		new BridgeMap("mr_recvfrom", 0x90, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_sendto", 0x94, BridgeMapType.MAP_FUNC, null, null, 0),
		new BridgeMap("mr_startShake", 0x98, BridgeMapType.MAP_FUNC, null, br_mr_startShake, 0),
		new BridgeMap("mr_stopShake", 0x9c, BridgeMapType.MAP_FUNC, null, br_mr_stopShake, 0),
		new BridgeMap("mr_playSound", 0xa0, BridgeMapType.MAP_FUNC, null, br_mr_playSound, 0),
		new BridgeMap("mr_stopSound", 0xa4, BridgeMapType.MAP_FUNC, null, br_mr_stopSound, 0),
		new BridgeMap("mr_dialogCreate", 0xa8, BridgeMapType.MAP_FUNC, null, br_mr_dialogCreate, 0),
		new BridgeMap("mr_dialogRelease", 0xac, BridgeMapType.MAP_FUNC, null, br_mr_dialogRelease, 0),
		new BridgeMap("mr_dialogRefresh", 0xb0, BridgeMapType.MAP_FUNC, null, br_mr_dialogRefresh, 0),
		new BridgeMap("mr_textCreate", 0xb4, BridgeMapType.MAP_FUNC, null, br_mr_textCreate, 0),
		new BridgeMap("mr_textRelease", 0xb8, BridgeMapType.MAP_FUNC, null, br_mr_textRelease, 0),
		new BridgeMap("mr_textRefresh", 0xbc, BridgeMapType.MAP_FUNC, null, br_mr_textRefresh, 0),
		new BridgeMap("mr_editCreate", 0xc0, BridgeMapType.MAP_FUNC, null, br_mr_editCreate, 0),
		new BridgeMap("mr_editRelease", 0xc4, BridgeMapType.MAP_FUNC, null, br_mr_editRelease, 0),
		new BridgeMap("mr_editGetText", 0xc8, BridgeMapType.MAP_FUNC, null, br_mr_editGetText, 0)
	};
	//////////////////////////////////////////////////////////////////////////////////////////

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following method format was not recognized, possibly due to an unrecognized macro:
	//struct rb_root root;

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	internal static int hooks_init(uc_engine uc, BridgeMap[] map, int mapCount, uint startAddress)
	{
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'BridgeMap' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		BridgeMap* obj;
		uIntMap* mobj;
		uint addr;

		for (int i = 0; i < mapCount; i++)
		{
			fixed (BridgeMap*  objs = &map[i])
			{
				obj = objs;
				addr = startAddress + obj->pos;
				if (obj->initFn != IntPtr.Zero)
				{
                    BridgeInit inits = Marshal.GetDelegateForFunctionPointer<BridgeInit>(obj->initFn);
                    inits(*obj, uc, (uint)addr);
                }
				else
				{
					if (obj->type == BridgeMapType.MAP_FUNC)
					{
						// 默认的函数初始化，初始化为地址值，当PC寄存器执行到该地址时拦截下来进入我们的回调函数
						uc_mem_write(uc, addr, &addr, 4);
					}
				}
				//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
				mobj = (uIntMap*)malloc(sizeof(uIntMap));
				mobj->key = addr;
				//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
				//ORIGINAL LINE: mobj->data = obj;
				mobj->data = obj;
				if (uIntMap_insert(rootP, mobj) != 0)
				{
					Console.Write("uIntMap_insert() failed {0:D} exists.\n", addr);
					Environment.Exit(1);
					return -1;
				}
			}
		}
		return 0;
	}

	// 必需是在BRIDGE_TABLE_ADDRESS开始，长度为BRIDGE_TABLE_SIZE的内存中分配地址
	// clang-format off
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MR_TABLE_ADDRESS BRIDGE_TABLE_ADDRESS
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MR_C_FUNCTION_ADDRESS (MR_TABLE_ADDRESS + MR_TABLE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define DSM_REQUIRE_FUNCS_ADDRESS (MR_C_FUNCTION_ADDRESS + MR_C_FUNCTION_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define END_ADDRESS (DSM_REQUIRE_FUNCS_ADDRESS + DSM_REQUIRE_FUNCS_SIZE)

	internal static uint bridge_mr_helper(uc_engine uc, uint code, long input, uint input_len)
	{
		// typedef int32 (*MR_C_FUNCTION)(void* P, int32 code, uint8* input, int32 input_len, uint8** output, int32* output_len);

		uint v = (((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE);
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, v); // p
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R1, code); // code
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R2, input); // input
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R3, input_len); // input_len

		uint sp=0;
		uint addr;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_SP,out sp);

		// mr_c_function.start_of_ER_RW 会被写入r9(SB)，指向的内存是用来存放全局变量的
		v = *(uint*)getMrpMemPtr((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.MR_TABLE_SIZE));
		Console.Write("bridge_mr_helper() sp: 0x{0:X}[{1:D}], sb(r9):0x{2:X}\n", sp, sp, v);

		addr = sp;
		v = 0; // 相当于传递 NULL

		addr -= 4;
		uc_mem_write(uc, addr, &v, 4); // output_len
		addr -= 4;
		uc_mem_write(uc, addr, &v, 4); // output
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_SP, addr);

		runCode(uc, mr_helper_addr, DefineConstants.CODE_ADDRESS, false);

		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_SP, sp);

		uint ret;
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0,out ret);
		return ret;
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////

	/*
	// 以下是三个在ext中的函数实现原理，是在mr_helper_s.o反汇编得到，但是我没有在c源码中获得实际的值，可能是用法不对
	extern unsigned int Image$$ER_RW$$Length;
	extern unsigned int Image$$ER_ZI$$ZI$$Length;
	extern unsigned int Image$$ER_RO$$Length;
	unsigned int mr_helper_get_rw_len() {
	    return Image$$ER_RW$$Length + Image$$ER_ZI$$ZI$$Length;
	}
	unsigned int mr_helper_get_rw_lenOnly() {
	    return Image$$ER_RW$$Length;
	}
	unsigned int mr_helper_get_ro_len() {
	    return Image$$ER_RO$$Length;
	}
	*/
	//internal static pthread_mutex_t mutex = new pthread_mutex_t();
	public static bool flag = false;
	internal static Mutex mutex = new Mutex(true, "Test", out flag);
	internal static uint dsm_export_funcs;

	internal static int bridge_dsm_version(uc_engine uc)
	{
		//     int32 version; // 0x00
		return *((int*)getMrpMemPtr(dsm_export_funcs + 0x00));
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define LOG(format, ...) printf(">> " format "\n", ##__VA_ARGS__)
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: A test for this #define occurs before this statement, so this statement cannot be moved to the top of the file:
	//#define LOG
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define NULL (void*)0
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define EM_PORT_API(rettype) rettype
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_color(r) ((r)->rb_parent_color & 1)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_is_red(r) (!rb_color(r))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_is_black(r) rb_color(r)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_ROOT (struct rb_root) { NULL, }
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_entry(ptr, type, member) container_of(ptr, type, member)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );})
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_EMPTY_NODE(node) (rb_parent(node) == node)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_CLEAR_NODE(node) (rb_set_parent(node, node))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define offsetof(type, field) ((size_t) & ((type *)0)->field)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define countof(x) (sizeof(x) / sizeof((x)[0]))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define ALIGN(x, align) (((x) + ((align)-1)) & ~((align)-1))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MAKERGB565(r, g, b) (uint16_t)(((uint32_t)(r >> 3) << 11) | ((uint32_t)(g >> 2) << 5) | ((uint32_t)(b >> 3)))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565R(v) ((((uint32_t)v >> 11) << 3) & 0xff)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565G(v) ((((uint32_t)v >> 5) << 2) & 0xff)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565B(v) (((uint32_t)v << 3) & 0xff)

	public static void hook_code_debug(uc_engine uc, ulong address, uint size)
	{
//		string str = new string(new char[60]);
//		string ptr;
//		int eqPos;
//		uc_err err = new uc_err();

//		if (run)
//		{
//			return;
//		}
//		while (brkAddress == 0 || brkAddress == address)
//		{
//			brkAddress = 0;

//			cs_mode mode = new cs_mode();
//			uint pc;
//			uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_PC,out pc);

//			if (size <= 4)
//			{
//				cs_insn insn;
//				uint binary;
//				uint count;
//				csh handle = new csh();
//				uint cpsr;

//				uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_CPSR, cpsr);
//				mode = ((cpsr & (1 << 5)) != 0) ? CS_MODE_THUMB : CS_MODE_ARM;

//				if (cs_open(CS_ARCH_ARM, mode, handle) != CS_ERR_OK)
//				{
//					Console.Write("debug cs_open() fail.");
//					Environment.Exit(1);
//				}
//				uc_mem_read(uc, address, binary, size);
//				count = cs_disasm(handle, (byte) & binary, size, address, 1, insn);
//				if (count > 0)
//				{
//					string cpsrStr = new string(new char[5]);
//					cpsrToStr(cpsr, ref cpsrStr);
//					for (uint j = 0; j < count; j++)
//					{
////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
////ORIGINAL LINE: printf("[PC:0x%X  %s   %s %s   %s  mem:0x%" +PRIx64+ "]> ", pc, cpsrStr, insn[j].mnemonic, insn[j].op_str, (mode == CS_MODE_ARM ? "ARM" : "THUMB"), address);
//						Console.Write("[PC:0x{0:X}  {1}   {2} {3}   {4}  mem:0x%" +PRIx64+ "]> ", pc, cpsrStr, insn[j].mnemonic, insn[j].op_str, (mode == CS_MODE_ARM ? "ARM" : "THUMB"), address);
//					}
//					cs_free(insn, count);
//				}
//				else
//				{
////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
////ORIGINAL LINE: printf("[PC:0x%X, mem:0x%" +PRIx64+ ", size:%d]> ", pc, address, size);
//					Console.Write("[PC:0x{0:X}, mem:0x%" +PRIx64+ ", size:{2:D}]> ", pc, address, size);
//				}
//				cs_close(handle);
//			}

//			ptr = fgets(str, sizeof(sbyte), stdin);
//			if (ptr == null)
//			{
//				break;
//			}

//			eqPos = 0; // 等号的位置
//			ptr = str; // 转换成全小写
//			while (ptr != 0)
//			{
//				if (char.IsLetter(ptr))
//				{
//					ptr = char.ToLower(ptr);
//				}
//				else if (ptr == (sbyte)'\n')
//				{
//					ptr = (sbyte)'\0';
//					break;
//				}
//				if (eqPos == 0 && ptr == (sbyte)'=')
//				{
//					eqPos = ptr - str;
//				}
//				ptr = ptr.Substring(1);
//			}
//			if (str[0] == '\0')
//			{
//				return;

//			}
//			else if (string.Compare("reg", str) == 0)
//			{ // 打印所有寄存器内容
//				dumpREG(uc);

//			}
//			else if (string.Compare("run", 0, str, 0, 3) == 0)
//			{ // 停止debug，不中断运行
//				run = true;
//				return;

//			}
//			else if (string.Compare("dump", 0, str, 0, 4) == 0)
//			{
//				dumpFile(uc, ref str);
//				return;

//			}
//			else if (string.Compare("brkn", 0, str, 0, 5) == 0)
//			{ // 单步跳过
//				brkAddress = pc + size;
//				Console.Write("-------------> brkn 0x{0:X}\n", brkAddress);

//			}
//			else if (string.Compare("brklr", 0, str, 0, 5) == 0)
//			{ // 执行到lr地址
//				uc_reg_read(uc, ARM_REG_LR, brkAddress);
//				Console.Write("-------------> brklr 0x{0:X}\n", brkAddress);

//			}
//			else if (string.Compare("brk", 0, str, 0, 3) == 0)
//			{ // 执行到断点地址
//				brkAddress = toUint32(str);
//				Console.Write("-------------> brk 0x{0:X}\n", brkAddress);

//			}
//			else if (str[0] == '=' && str[1] == '0' && str[2] == 'x')
//			{ // 打印指定地址处的字符串
//				uint addr = toUint32(str);
//				byte v;
//				Console.Write("==> print 0x{0:x} memory string: ", addr);
//				do
//				{
//					uc_mem_read(uc, addr, v, 1);
//					Console.Write(v);
//					addr++;
//				} while (v != 0);
//				Console.Write('\n');

//			}
//			else if (str[0] == '0' && str[1] == 'x')
//			{ // 读写内存
//				if (eqPos > 0)
//				{
//					string buf = new string(new char[11]); // "0x4750524D".length + 1
//					getEqLeftStr(ref str, eqPos, ref (string)buf, 10);
//					uint addr = toUint32(buf);
//					uint value = toUint32(str);

//					err = uc_mem_write(uc, addr, value, 4);
//					if (err != 0)
//					{
//						Console.Write("==> Failed set memory addr: 0x{0:x}=0x{1:x} err:{2:D} ({3})\n", addr, value, err, uc_strerror(err));
//					}
//					else
//					{
//						Console.Write("==> set memory addr: 0x{0:x}=0x{1:x}\n", addr, value);
//					}

//				}
//				else
//				{
//					uint addr = toUint32(str);
//					uint value;
//					err = uc_mem_read(uc, addr, value, 4);
//					if (err != 0)
//					{
//						Console.Write("==> Failed read memory addr: 0x{0:x} err:{1:D} ({2})\n", addr, err, uc_strerror(err));
//					}
//					else
//					{
//						Console.Write("==> read memory addr: 0x{0:x}=0x{1:x}  ", addr, value);
//						dumpMemStr(value, 4);
//						Console.Write('\n');
//					}
//				}

//			}
//			else if (StringFunctions.StrChr(str, '=') != null)
//			{ // 修改寄存器值
//				sbyte[] buf = new sbyte[4];
//				getEqLeftStr(ref str, eqPos, ref (string)buf, 3);
//				uint value = toUint32(str);

//				uc_arm_reg reg = uc_arm_reg.UC_ARM_REG_INVALID;
//				if (buf[0] == (sbyte)'r')
//				{
//					if (buf[1] == (sbyte)'1' && buf[2] != (sbyte)'\0')
//					{ // r10-r12
//						if (buf[2] == (sbyte)'0')
//						{
//							reg = uc_arm_reg.UC_ARM_REG_R10;
//						}
//						else if (buf[2] == (sbyte)'1')
//						{
//							reg = uc_arm_reg.UC_ARM_REG_R11;
//						}
//						else if (buf[2] == (sbyte)'2')
//						{
//							reg = uc_arm_reg.UC_ARM_REG_R12;
//						}
//					}
//					else if (buf[1] >= (sbyte)'0' && buf[1] <= (sbyte)'9')
//					{ // r0-r9
//						uc_arm_reg[] arr = {uc_arm_reg.UC_ARM_REG_R0, uc_arm_reg.UC_ARM_REG_R1, uc_arm_reg.UC_ARM_REG_R2, uc_arm_reg.UC_ARM_REG_R3, uc_arm_reg.UC_ARM_REG_R4, uc_arm_reg.UC_ARM_REG_R5, uc_arm_reg.UC_ARM_REG_R6, uc_arm_reg.UC_ARM_REG_R7, uc_arm_reg.UC_ARM_REG_R8, uc_arm_reg.UC_ARM_REG_R9};
//						reg = arr[buf[1] - '0'];
//					}
//				}
//				else if (buf[0] == (sbyte)'s' && buf[1] == (sbyte)'p')
//				{
//					reg = uc_arm_reg.UC_ARM_REG_SP;
//				}
//				else if (buf[0] == (sbyte)'l' && buf[1] == (sbyte)'r')
//				{
//					reg = uc_arm_reg.UC_ARM_REG_LR;
//				}
//				else if (buf[0] == (sbyte)'p' && buf[1] == (sbyte)'c')
//				{
//					reg = uc_arm_reg.UC_ARM_REG_PC;
//				}
//				if (reg != uc_arm_reg.UC_ARM_REG_INVALID)
//				{
//					err = uc_reg_write(uc, reg, value);
//					if (err != 0)
//					{
//						Console.Write("==> Failed register assign {0}=0x{1:x} err:{2:D} ({3})\n", buf, value, err, uc_strerror(err));
//					}
//					else
//					{
//						Console.Write("==> register assign {0}=0x{1:x}\n", buf, value);
//					}
//				}
//				else
//				{
//					Console.Write("==> register '{0}' invalid\n", buf);
//				}

//			}
//			else
//			{
//				// clang-format off
//				Console.Write("    reg                       - print all regs\n" + "    run                       - run\n" + "    brk 0x80030               - run code to 0x80030\n" + "    brklr                     - run code to lr\n" + "    SP=0x0027FFF0             - set SP register to 0x0027FFF0\n" + "    0x00080008                - print 0x00080008 memory content\n" + "    =0x80E34                  - print 0x80E34 address string content\n" + "    0x00080008=0xFFFFFFFF     - set 0x00080008 memory content to 0xFFFFFFFF\n" + "    dump,a.bin,0x2b3e16,0xff  - dump memory 0x2b3e16 to a.bin length is 0xff\n");
//				// clang-format on
//			}
		//} // while
	}


	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STACK_ADDRESS (CODE_ADDRESS + CODE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define BRIDGE_TABLE_ADDRESS (STACK_ADDRESS + STACK_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MEMORY_MANAGER_ADDRESS (BRIDGE_TABLE_ADDRESS + BRIDGE_TABLE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_ADDRESS (MEMORY_MANAGER_ADDRESS + MEMORY_MANAGER_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT * 2)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define START_ADDRESS CODE_ADDRESS
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STOP_ADDRESS (SCREEN_BUF_ADDRESS + SCREEN_BUF_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TOTAL_MEMORY (STOP_ADDRESS - START_ADDRESS)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: The following #include directive was ignored:
	//#include "./windows/capstone-4.0.1-win32/include/capstone/capstone.h"

	// 获取等号左边的内容，限制长最大长度为maxLen个字符,
	// outBuf的容量应该至少maxLen+1字节
	internal static void getEqLeftStr(sbyte * str, int eqPos, sbyte* outBuf, int maxLen)
	{
		int start = eqPos <= maxLen ? 0 : eqPos - maxLen;
		int end = eqPos;
		int i = 0;
		while (start < end)
		{
			outBuf[i] = str[start];
			start++;
			i++;
		}
		outBuf[i] = (sbyte )'\0';
	}

	/*
	转换一个全小写的十六进制字符串到32位整数，原理是从字符串末尾开始转换
	0x4750524d1a  超过32位长度将只转换低32位
	*/
//	internal static int toUint32(sbyte * str)
//	{
////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
//		sbyte * ptr = str;

//		while (*ptr != 0)
//		{
//			ptr++;
//		}

//		int tmp;
//		int v = 0;
//		uint i = 0;
//		for (ptr--; ptr >= str  && i < 32; ptr--)
//		{
//			if (*ptr >= (sbyte)'0' && *ptr <= (sbyte)'9')
//			{
//				tmp = *ptr - '0';
//			}
//			else if (*ptr >= (sbyte)'a' && *ptr <= (sbyte)'f')
//			{
//				tmp = *ptr - 'a' + 10;
//			}
//			else
//			{
//				break;
//			}
//			v |= tmp << (int)i;
//			i += 4;
//		}
//		return v;
//	}

	internal static void dumpFile(uc_engine uc, sbyte* str)
	{
		// dump,a.bin,0x2b3e16,0xff
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: sbyte *filename = getSplitStr(str, ',', 1);
		sbyte* filename = getSplitStr( str, (sbyte)',', 1);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: sbyte *addrStr = getSplitStr(str, ',', 2);
		sbyte* addrStr = getSplitStr( str, (sbyte)',', 2);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: sbyte *lenStr = getSplitStr(str, ',', 3);
		sbyte* lenStr = getSplitStr( str, (sbyte)',', 3);
		uint addr = toUint32(addrStr);
		uint length = toUint32(lenStr);
		writeFile(filename, getMrpMemPtr(addr), length);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
		free(filename);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
		free(addrStr);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
		free(lenStr);
	}

	internal static uint brkAddress = 0;
	internal static bool run = false;

/////////////////////////////////////////////////////////////////


	// 注意在mrp中的字符编码
	public static int my_open(sbyte* filename, uint mode)
	{
		FILE f;
		int new_mode = 0;

		if ((mode & DefineConstants.MR_FILE_RDONLY) != 0)
		{
			new_mode = O_RDONLY;
		}
		if ((mode & DefineConstants.MR_FILE_WRONLY) != 0)
		{
			new_mode = O_WRONLY;
		}
		if ((mode & DefineConstants.MR_FILE_RDWR) != 0)
		{
			new_mode = O_RDWR;
		}
		if ((mode & DefineConstants.MR_FILE_CREATE) != 0)
		{
			new_mode |= O_CREAT;
		}

	#if _WIN32
		new_mode |= O_RAW;
	#endif

		//f = open(new string(filename), new_mode, S_IRWXU | S_IRWXG | S_IRWXO);
        f = open("vmrp.mrp", new_mode, S_IRWXU | S_IRWXG | S_IRWXO);
		if ((int)f.Handle == -1)
		{
			return 0;
		}
		return handle2int32(f);
	}
	public static int my_close(int f)
	{
		if (f == 0)
		{
			return DefineConstants.MR_FAILED;
		}

		int ret = close(int32ToHandle(f));
		handleDel(f);
		if (ret != 0)
		{
			return DefineConstants.MR_FAILED;
		}
		Console.Write("my_close({0:D}) suc\n", f);
		return DefineConstants.MR_SUCCESS;
	}

	public static uint my_seek(uint f, uint pos, uint method)
	{
		return (uint) my_seek((int)f, (int)pos, (int)method);
	}

	public static int my_seek(int f, AnonymousEnum5 pos, int method)
    {
		return my_seek(f,(int)pos,method);
    }

	public static int my_seek(int f,int pos, AnonymousEnum5 method)
	{
		return my_seek(f, pos, (int)method);
	}

	public static int my_seek(int f, int pos, int method)
	{
		int ret = lseek(int32ToHandle(f), (int)pos, method);
		if (ret < 0)
		{
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	}
	public static int my_read(int f, void* p, uint l)
	{
		uint readnum = read(int32ToHandle(f), p, (uint)l);
		if (readnum < 0)
		{
			return DefineConstants.MR_FAILED;
		}
		return (int)readnum;
	}
	public static int my_write(int f, void* p, uint l)
	{
		//int writenum = write(int32ToHandle(f), p, (uint)l);
		//if (writenum < 0)
		//{
		//	return DefineConstants.MR_FAILED;
		//}
		//return writenum;
		UnityEngine.Debug.Log("write");
		return DefineConstants.MR_SUCCESS;
	}
	public static int my_rename(string oldname, string newname)
	{
		int ret = rename(oldname, newname);
		if (ret != 0)
		{
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	}
	public static int my_remove(string filename)
	{
		int ret = remove(filename);
		if (ret != 0)
		{
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	}
	public static int my_getLen(string filename)
	{
		stat s1 = new stat();
		int ret = Stat(filename, s1);
		if (ret != 0)
		{
			return -1;
		}
		return (int)s1.st_size;
	}
	public static int my_mkDir(sbyte* name)
	{
		int ret;
		if (access(new string( name), F_OK) == 0)
		{ //检测是否已存在
			goto ok;
		}
	#if ! _WIN32
		ret = mkdir(new string(name), S_IRWXU | S_IRWXG | S_IRWXO);
#else
		ret = mkdir(new string( name));
#endif
		if (ret != 0)
		{
			return DefineConstants.MR_FAILED;
		}
	ok:
		return DefineConstants.MR_SUCCESS;
	}
	public static int my_rmDir(string name)
	{
		int ret = rmdir(name);
		if (ret != 0)
		{
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	}



	public static uint my_info(sbyte * filename)
	{
		stat s1 = new stat();
		int ret = Stat(new string ( filename), s1);

		if (ret != 0)
		{
			return DefineConstants.MR_IS_INVALID;
		}
		if ((s1.st_mode & S_IFDIR) != 0)
		{
			return DefineConstants.MR_IS_DIR;
		}
		else if ((s1.st_mode & S_IFREG)!=0)
		{
			return DefineConstants.MR_IS_FILE;
		}
		return DefineConstants.MR_IS_INVALID;
	}
	public static int my_opendir(string name)
	{
		DIR pDir = opendir(name);
		if (pDir != null)
		{
			return handle2int32(pDir.handle);
		}
		return DefineConstants.MR_FAILED;
	}
	public static sbyte* my_readdir(int f)
	{
		DIR pDir = (DIR)int32ToHandle(f);
		dirent pDt = readdir(pDir);
		if (pDt != null)
		{
			return pDt.d_name;
		}
		return null;
	}
	public static uint my_closedir(int f)
	{
		DIR pDir = (DIR)int32ToHandle(f);
		closedir(pDir);
		handleDel(f);
		return DefineConstants.MR_SUCCESS;
	}

//-----------------------------------------

	public static int getMrpFileInfo(sbyte* path, string name, ref int offset, ref int length)
	{
		int fd;
		int flStar = 0; // MRP 文件列表起、止位置
		int flEnd = 0;
		uint fnLen = 0; // mrp 内文件名长度,文件长度
		int fLen;
		char [] fName = new char[128]; //文件名
		int off;

		fd = my_open(path, DefineConstants.MR_FILE_RDONLY);
		if (fd != 0)
		{
			//读取文件列表终点位置
			my_seek(fd, AnonymousEnum5.MR_SEEK_SET, 4);
			my_read(fd, &flEnd, 4);
			flEnd += 8;

			//读取文件列表起始位置
			my_seek(fd, 12, AnonymousEnum5.MR_SEEK_SET);
			my_read(fd, &flStar, 4);

			while (flStar < flEnd)
			{
				// 1.读取文件名
				my_seek(fd, flStar, AnonymousEnum5.MR_SEEK_SET);
				my_read(fd, &fnLen, 4); //获取文件名长度
				my_read(fd, (sbyte*)getBytePtr(fName), fnLen); //读取文件名

				if (0 != string.Compare(new string ( fName), name))
				{ //找到了
					goto NEXT;
				}

				// 2.读取文件长度、偏移
				my_read(fd, &off, 4);
				my_read(fd, &fLen, 4);
				if (offset != 0)
				{
					offset = off;
				}
				if (length != 0)
				{
					length = fLen;
				}

				return DefineConstants.MR_SUCCESS;

			NEXT:
				// 3.准备读取下一个文件
				flStar =(int)( flStar + fnLen + 16); //查找下个文件
				fnLen = 0;
			}

			//读取完毕记录总数
			my_close(fd);
		}

		return DefineConstants.MR_FAILED;
	}

// 读取mrp文件
// 参数：mrp路径，读取文件，读取位置(返回)，读取大小(返回，解压后)，读取的数据(返回，尝试解压)
// 返回：成功或失败

	public static int readMrpFileEx(sbyte* path, string name, out int offset, out uint length, byte** data)
	{
		int fd = 0;
		int flStar; // MRP 文件列表起、止位置
		int flEnd;
		uint fnLen = 0; // mrp 内文件名长度,文件长度
		uint fLen;
		sbyte[] fName =new sbyte[100]; //文件名
		sbyte* f = (sbyte*)getBytePtr(fName);
		offset =0;
		length = 0;
		fd = my_open(path, DefineConstants.MR_FILE_RDONLY);
		if (0 == fd)
		{
			goto err;
		}

		//读取文件列表起始位置
		my_seek(fd, 12, AnonymousEnum5.MR_SEEK_SET);
		my_read(fd, &flStar, 4);

		//读取文件列表终点位置
		my_seek(fd, 4, AnonymousEnum5.MR_SEEK_SET);
		my_read(fd, &flEnd, 4);
		flEnd += 8;

		while (flStar < flEnd)
		{
			// 1.读取文件名
			my_seek(fd, flStar, AnonymousEnum5.MR_SEEK_SET);
			my_read(fd, &fnLen, 4); //获取文件名长度
			my_read(fd, f , fnLen); //读取文件名
			string filename = new string(f);
			if (0 == string.Compare(filename, name))
			{
				int fOffset;

				// 2.读取文件长度、偏移
				my_read(fd, &fOffset, 4);
				my_read(fd,& fLen, 4);

				//if (null != offset)
				{
					offset = fOffset;
				}

				// 读取文件大小
				//if (0 != length)
				{
					byte[] magic = new byte[2];

					my_seek(fd, fOffset, AnonymousEnum5.MR_SEEK_SET);
					my_read(fd,(void *) getBytePtr( magic), 2);
					if (magic[0] == 0x1f && magic[1] == 0x8b)
					{
						my_seek(fd,(int)( fOffset + fLen - 4), AnonymousEnum5.MR_SEEK_SET);
						uint len;
						my_read(fd,& len, 4);
						length = len;
					}
					else
					{
						length = fLen;
					}
				}

				// 读取数据
				if (null != data)
				{
					int ret;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *data_org;
					byte* data_org;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *data_out;
					byte* data_out;
					uint size_out;

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
					byte[] datas = new byte [fLen];
					//data_org = malloc(fLen);
					data_org = (byte*)getBytePtr(datas);
					my_seek(fd, fOffset, AnonymousEnum5.MR_SEEK_SET);
					my_read(fd, data_org, fLen);
					size_out = *(uint*)(data_org + fLen - 4);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
					data_out = malloc(size_out);

					ret = ungzipdata( &data_out,ref size_out, datas, fLen);
					if (Z_OK == ret)
					{
						data[0] = data_out;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
						free(data_org);
						if (0 != length)
						{
							length = size_out;
						}
					}
					else if (Z_DATA_ERROR == ret)
					{
						data[0] = data_org;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
						free(data_out);
					}
				}

				goto ok;
			}

			// 3.准备读取下一个文件
			flStar = (int)(flStar + fnLen + 16); //查找下个文件
			fnLen = 0;
		}

	ok:
		if (0 != fd)
		{
			my_close(fd);
		}

		return DefineConstants.MR_SUCCESS;

	err:
		if (0 != fd)
		{
			my_close(fd);
		}

		return DefineConstants.MR_FAILED;
	}

	public static int Z_OK = 0;
	public static int Z_DATA_ERROR = -1;

	// -------------- 从mrp读取文件数据 for Mrpoid 2012-9-9 eleqian
	// --------------------
	/*
	解压gzip数据
	备注：
	改编自zlib中uncompress函数 2012-9-9 eleqian
	返回值：
	Z_OK - 成功
	Z_MEM_ERROR - 内存不足
	Z_BUF_ERROR - 输出缓冲区不足
	Z_DATA_ERROR - 数据错误
	*/

	//public static int ungzipdata(ref byte[] dst, ref uint destLen, byte source, uint sourceLen)
	public static int ungzipdata( byte** dst,ref uint dstLen, byte[] src, uint srcLen)
	{
		//z_stream stream = new z_stream();
		//int err;

		//stream.next_in = (Bytef)source;
		//stream.avail_in = (uInt)sourceLen;
		//stream.next_out = (Bytef)dest;
		//stream.avail_out = (uInt) destLen;
		//stream.zalloc = (alloc_func)0;
		//stream.zfree = (free_func)0;

		//err = inflateInit2(stream, MAX_WBITS + 16);
		//if (err != Z_OK)
		//{
		//	return err;
		//}

		//err = inflate(stream, Z_FINISH);
		//if (err != Z_STREAM_END)
		//{
		//	inflateEnd(stream);
		//	if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
		//	{
		//		return Z_DATA_ERROR;
		//	}
		//	return err;
		//}

		//destLen = stream.total_out;
		//err = inflateEnd(stream);

		//return err;

		z_stream strm2 = new z_stream();
		
		strm2.avail_out = (uint)DefineConstants.CODE_SIZE;
		strm2.out_buf = new byte[DefineConstants.CODE_SIZE];
		
		strm2.avail_in = (uint)srcLen;
		strm2.in_buf = src;

		int err2 = Free.Ports.zLib.zlib.inflateInit2(strm2, Free.Ports.zLib.zlib.MAX_WBITS + 16);
		if (err2 != Z_OK)
		{
			Free.Ports.zLib.zlib.inflateEnd(strm2);
			return -1;
		}
		err2 = Free.Ports.zLib.zlib.inflate(strm2, Z_FINISH);
		if (err2 != Z_STREAM_END)
		{
			Free.Ports.zLib.zlib.inflateEnd(strm2);
			return -1;
		}
		dstLen = (uint)strm2.total_out;
		*dst =(byte*) getBytePtr( new byte[dstLen]);
		memcpy(*dst, 0u, strm2.out_buf, 0u, dstLen);
		return Z_OK;
	}

// 列出mrp内的文件

	public static void listMrpFiles(sbyte* path)
	{
		int fd = 0;
		int flStar; // MRP 文件列表起、止位置
		int flEnd;
		int fnLen = 0; // mrp 内文件名长度,文件长度
		char[] fName = new char[128]; //文件名

		fd = my_open(path, DefineConstants.MR_FILE_RDONLY);
		if (DefineConstants.MR_FAILED == fd)
		{
			return;
		}

		//读取文件列表起始位置
		my_seek(fd, 12, AnonymousEnum5.MR_SEEK_SET);
		my_read(fd, &flStar, 4);

		//读取文件列表终点位置
		my_seek(fd, 4, AnonymousEnum5.MR_SEEK_SET);
		my_read(fd, &flEnd, 4);
		flEnd += 8;

		while (flStar < flEnd)
		{
			// 1.读取文件名
			my_seek(fd, flStar, AnonymousEnum5.MR_SEEK_SET);
			my_read(fd, &fnLen, 4); //获取文件名长度
			my_read(fd, (void*)getBytePtr ( fName), (uint)fnLen); //读取文件名
			Console.Write(">> " +"listMrpFiles(): {0}"+ "\n",__VA_ARGS__);
			// 3.准备读取下一个文件
			flStar = flStar + fnLen + 16; //查找下个文件
			fnLen = 0;
		}

		my_close(fd);
	}

	public static void fileLib_init()
	{
		handleInit();
	}
	public static void writeFile(sbyte * filename, void* data, uint length)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf(">> " "writeFile('%s',0x%p,%u)" "\n",__VA_ARGS__);
		Console.Write(">> " +"writeFile('{0}',0x%p,{2:D})"+ "\n",__VA_ARGS__);
		int fh = my_open(filename, DefineConstants.MR_FILE_CREATE | DefineConstants.MR_FILE_RDWR);
		my_write(fh, data, length);
		my_close(fh);
	}



	/////////////////////////////////////////////////////////////////

	// 因为系统句柄转成int32可能是负数，导致mrp编程不规范只判断是否大于0时出现遍历文件夹为空的bug，需要有一种转换机制避免返回负数
	// 0号下标不使用，下标作为mrp使用的句柄，值为系统的句柄，值为-1时表示未使用
	public static FILE[] handles = new FILE[DefineConstants.HANDLE_NUM + 1];

	internal static void handleInit()
	{
		for (int i = 1; i <= DefineConstants.HANDLE_NUM; i++)
		{
			handles[i] = null ;
		}
	}
	// 注意： mrc_open需要返回0表示失败， mrc_findStart需要返回-1表示失败，这里没做区分
	internal static int handle2int32(FILE v)
	{
		for (int i = 1; i <= DefineConstants.HANDLE_NUM; i++)
		{
			if (handles[i] == null)
			{
				handles[i] = v;
				return i;
			}
		}
		return -1; // 失败
	}

	internal static FILE int32ToHandle(int v)
	{
		if (v <= 0 || v > DefineConstants.HANDLE_NUM)
		{
			//return -1;
			return null;
		}
		return handles[v];
	}

	internal static void handleDel(int v)
	{
		if (v <= 0 || v > DefineConstants.HANDLE_NUM)
		{
			return;
		}
		//handles[v] = -1;
		handles[v] = null;
	}
	public static int __VA_ARGS__;
	public static int extractFile(sbyte * filename)
	{
		string writeFilename = "cfunction.ext";
		int offset;
		uint length;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *data;
		byte* data;
		int ret = readMrpFileEx(filename, writeFilename, out offset, out length, &data);
		if (ret == DefineConstants.MR_SUCCESS)
		{
			Console.Write(">> " +"red suc: offset:{0:D}, length:{1:D}" +"\n",__VA_ARGS__);
			writeFile(getStringPtr ( writeFilename), data, length);
		}
		else
		{
			LOG("red failed");
		}

		return 0;
	}
	public static byte* gbToUCS2BE(byte* gbCode,out uint outSize)
	{
		uint bufSize = (uint)((new string((sbyte *)gbCode)).Length * 2 + 2);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		byte* unicode = (byte*)malloc(bufSize);

		
		outSize = bufSize;
		

		int i = 0;
		int j = 0;

		while (gbCode[i]!=0 && j < bufSize - 2)
		{
			if (gbCode[i] < 0x80)
			{
				unicode[j] = 0;
				unicode[j + 1] = gbCode[i];
				i += 1;
			}
			else
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: const byte *pReturn = GBCodeToUnicode(&gbCode[i]);
				byte* pReturn = GBCodeToUnicode( (byte*)(gbCode+i));
				if (pReturn != null)
				{
					unicode[j] = *(pReturn + 1);
					unicode[j + 1] = *pReturn;
				}
				else
				{ // 全角空格
					unicode[j] = 0x30;
					unicode[j + 1] = 0x00;
				}
				i += 2;
			}
			j += 2;
		}
		unicode[j] = 0;
		unicode[j + 1] = 0;
		return unicode;
	}




	// clang-format off
	// 编码表
	internal static readonly byte[] gb2uTable = {0x00, 0x30, 0x01, 0x30, 0x02, 0x30, 0xb7, 0x00, 0xc9, 0x02, 0xc7, 0x02, 0xa8, 0x00, 0x03, 0x30, 0x05, 0x30, 0x14, 0x20, 0x5e, 0xff, 0x16, 0x20, 0x26, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x14, 0x30, 0x15, 0x30, 0x08, 0x30, 0x09, 0x30, 0x0a, 0x30, 0x0b, 0x30, 0x0c, 0x30, 0x0d, 0x30, 0x0e, 0x30, 0x0f, 0x30, 0x16, 0x30, 0x17, 0x30, 0x10, 0x30, 0x11, 0x30, 0xb1, 0x00, 0xd7, 0x00, 0xf7, 0x00, 0x36, 0x22, 0x27, 0x22, 0x28, 0x22, 0x11, 0x22, 0x0f, 0x22, 0x2a, 0x22, 0x29, 0x22, 0x08, 0x22, 0x37, 0x22, 0x1a, 0x22, 0xa5, 0x22, 0x25, 0x22, 0x20, 0x22, 0x12, 0x23, 0x99, 0x22, 0x2b, 0x22, 0x2e, 0x22, 0x61, 0x22, 0x4c, 0x22, 0x48, 0x22, 0x3d, 0x22, 0x1d, 0x22, 0x60, 0x22, 0x6e, 0x22, 0x6f, 0x22, 0x64, 0x22, 0x65, 0x22, 0x1e, 0x22, 0x35, 0x22, 0x34, 0x22, 0x42, 0x26, 0x40, 0x26, 0xb0, 0x00, 0x32, 0x20, 0x33, 0x20, 0x03, 0x21, 0x04, 0xff, 0xa4, 0x00, 0xe0, 0xff, 0xe1, 0xff, 0x30, 0x20, 0xa7, 0x00, 0x16, 0x21, 0x06, 0x26, 0x05, 0x26, 0xcb, 0x25, 0xcf, 0x25, 0xce, 0x25, 0xc7, 0x25, 0xc6, 0x25, 0xa1, 0x25, 0xa0, 0x25, 0xb3, 0x25, 0xb2, 0x25, 0x3b, 0x20, 0x92, 0x21, 0x90, 0x21, 0x91, 0x21, 0x93, 0x21, 0x13, 0x30, 0x70, 0x21, 0x71, 0x21, 0x72, 0x21, 0x73, 0x21, 0x74, 0x21, 0x75, 0x21, 0x76, 0x21, 0x77, 0x21, 0x78, 0x21, 0x79, 0x21, 0x66, 0xe7, 0x67, 0xe7, 0x68, 0xe7, 0x69, 0xe7, 0x6a, 0xe7, 0x6b, 0xe7, 0x88, 0x24, 0x89, 0x24, 0x8a, 0x24, 0x8b, 0x24, 0x8c, 0x24, 0x8d, 0x24, 0x8e, 0x24, 0x8f, 0x24, 0x90, 0x24, 0x91, 0x24, 0x92, 0x24, 0x93, 0x24, 0x94, 0x24, 0x95, 0x24, 0x96, 0x24, 0x97, 0x24, 0x98, 0x24, 0x99, 0x24, 0x9a, 0x24, 0x9b, 0x24, 0x74, 0x24, 0x75, 0x24, 0x76, 0x24, 0x77, 0x24, 0x78, 0x24, 0x79, 0x24, 0x7a, 0x24, 0x7b, 0x24, 0x7c, 0x24, 0x7d, 0x24, 0x7e, 0x24, 0x7f, 0x24, 0x80, 0x24, 0x81, 0x24, 0x82, 0x24, 0x83, 0x24, 0x84, 0x24, 0x85, 0x24, 0x86, 0x24, 0x87, 0x24, 0x60, 0x24, 0x61, 0x24, 0x62, 0x24, 0x63, 0x24, 0x64, 0x24, 0x65, 0x24, 0x66, 0x24, 0x67, 0x24, 0x68, 0x24, 0x69, 0x24, 0x6c, 0xe7, 0x6d, 0xe7, 0x20, 0x32, 0x21, 0x32, 0x22, 0x32, 0x23, 0x32, 0x24, 0x32, 0x25, 0x32, 0x26, 0x32, 0x27, 0x32, 0x28, 0x32, 0x29, 0x32, 0x6e, 0xe7, 0x6f, 0xe7, 0x60, 0x21, 0x61, 0x21, 0x62, 0x21, 0x63, 0x21, 0x64, 0x21, 0x65, 0x21, 0x66, 0x21, 0x67, 0x21, 0x68, 0x21, 0x69, 0x21, 0x6a, 0x21, 0x6b, 0x21, 0x70, 0xe7, 0x71, 0xe7, 0x01, 0xff, 0x02, 0xff, 0x03, 0xff, 0xe5, 0xff, 0x05, 0xff, 0x06, 0xff, 0x07, 0xff, 0x08, 0xff, 0x09, 0xff, 0x0a, 0xff, 0x0b, 0xff, 0x0c, 0xff, 0x0d, 0xff, 0x0e, 0xff, 0x0f, 0xff, 0x10, 0xff, 0x11, 0xff, 0x12, 0xff, 0x13, 0xff, 0x14, 0xff, 0x15, 0xff, 0x16, 0xff, 0x17, 0xff, 0x18, 0xff, 0x19, 0xff, 0x1a, 0xff, 0x1b, 0xff, 0x1c, 0xff, 0x1d, 0xff, 0x1e, 0xff, 0x1f, 0xff, 0x20, 0xff, 0x21, 0xff, 0x22, 0xff, 0x23, 0xff, 0x24, 0xff, 0x25, 0xff, 0x26, 0xff, 0x27, 0xff, 0x28, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x2b, 0xff, 0x2c, 0xff, 0x2d, 0xff, 0x2e, 0xff, 0x2f, 0xff, 0x30, 0xff, 0x31, 0xff, 0x32, 0xff, 0x33, 0xff, 0x34, 0xff, 0x35, 0xff, 0x36, 0xff, 0x37, 0xff, 0x38, 0xff, 0x39, 0xff, 0x3a, 0xff, 0x3b, 0xff, 0x3c, 0xff, 0x3d, 0xff, 0x3e, 0xff, 0x3f, 0xff, 0x40, 0xff, 0x41, 0xff, 0x42, 0xff, 0x43, 0xff, 0x44, 0xff, 0x45, 0xff, 0x46, 0xff, 0x47, 0xff, 0x48, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x4b, 0xff, 0x4c, 0xff, 0x4d, 0xff, 0x4e, 0xff, 0x4f, 0xff, 0x50, 0xff, 0x51, 0xff, 0x52, 0xff, 0x53, 0xff, 0x54, 0xff, 0x55, 0xff, 0x56, 0xff, 0x57, 0xff, 0x58, 0xff, 0x59, 0xff, 0x5a, 0xff, 0x5b, 0xff, 0x5c, 0xff, 0x5d, 0xff, 0xe3, 0xff, 0x41, 0x30, 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x45, 0x30, 0x46, 0x30, 0x47, 0x30, 0x48, 0x30, 0x49, 0x30, 0x4a, 0x30, 0x4b, 0x30, 0x4c, 0x30, 0x4d, 0x30, 0x4e, 0x30, 0x4f, 0x30, 0x50, 0x30, 0x51, 0x30, 0x52, 0x30, 0x53, 0x30, 0x54, 0x30, 0x55, 0x30, 0x56, 0x30, 0x57, 0x30, 0x58, 0x30, 0x59, 0x30, 0x5a, 0x30, 0x5b, 0x30, 0x5c, 0x30, 0x5d, 0x30, 0x5e, 0x30, 0x5f, 0x30, 0x60, 0x30, 0x61, 0x30, 0x62, 0x30, 0x63, 0x30, 0x64, 0x30, 0x65, 0x30, 0x66, 0x30, 0x67, 0x30, 0x68, 0x30, 0x69, 0x30, 0x6a, 0x30, 0x6b, 0x30, 0x6c, 0x30, 0x6d, 0x30, 0x6e, 0x30, 0x6f, 0x30, 0x70, 0x30, 0x71, 0x30, 0x72, 0x30, 0x73, 0x30, 0x74, 0x30, 0x75, 0x30, 0x76, 0x30, 0x77, 0x30, 0x78, 0x30, 0x79, 0x30, 0x7a, 0x30, 0x7b, 0x30, 0x7c, 0x30, 0x7d, 0x30, 0x7e, 0x30, 0x7f, 0x30, 0x80, 0x30, 0x81, 0x30, 0x82, 0x30, 0x83, 0x30, 0x84, 0x30, 0x85, 0x30, 0x86, 0x30, 0x87, 0x30, 0x88, 0x30, 0x89, 0x30, 0x8a, 0x30, 0x8b, 0x30, 0x8c, 0x30, 0x8d, 0x30, 0x8e, 0x30, 0x8f, 0x30, 0x90, 0x30, 0x91, 0x30, 0x92, 0x30, 0x93, 0x30, 0x72, 0xe7, 0x73, 0xe7, 0x74, 0xe7, 0x75, 0xe7, 0x76, 0xe7, 0x77, 0xe7, 0x78, 0xe7, 0x79, 0xe7, 0x7a, 0xe7, 0x7b, 0xe7, 0x7c, 0xe7, 0xa1, 0x30, 0xa2, 0x30, 0xa3, 0x30, 0xa4, 0x30, 0xa5, 0x30, 0xa6, 0x30, 0xa7, 0x30, 0xa8, 0x30, 0xa9, 0x30, 0xaa, 0x30, 0xab, 0x30, 0xac, 0x30, 0xad, 0x30, 0xae, 0x30, 0xaf, 0x30, 0xb0, 0x30, 0xb1, 0x30, 0xb2, 0x30, 0xb3, 0x30, 0xb4, 0x30, 0xb5, 0x30, 0xb6, 0x30, 0xb7, 0x30, 0xb8, 0x30, 0xb9, 0x30, 0xba, 0x30, 0xbb, 0x30, 0xbc, 0x30, 0xbd, 0x30, 0xbe, 0x30, 0xbf, 0x30, 0xc0, 0x30, 0xc1, 0x30, 0xc2, 0x30, 0xc3, 0x30, 0xc4, 0x30, 0xc5, 0x30, 0xc6, 0x30, 0xc7, 0x30, 0xc8, 0x30, 0xc9, 0x30, 0xca, 0x30, 0xcb, 0x30, 0xcc, 0x30, 0xcd, 0x30, 0xce, 0x30, 0xcf, 0x30, 0xd0, 0x30, 0xd1, 0x30, 0xd2, 0x30, 0xd3, 0x30, 0xd4, 0x30, 0xd5, 0x30, 0xd6, 0x30, 0xd7, 0x30, 0xd8, 0x30, 0xd9, 0x30, 0xda, 0x30, 0xdb, 0x30, 0xdc, 0x30, 0xdd, 0x30, 0xde, 0x30, 0xdf, 0x30, 0xe0, 0x30, 0xe1, 0x30, 0xe2, 0x30, 0xe3, 0x30, 0xe4, 0x30, 0xe5, 0x30, 0xe6, 0x30, 0xe7, 0x30, 0xe8, 0x30, 0xe9, 0x30, 0xea, 0x30, 0xeb, 0x30, 0xec, 0x30, 0xed, 0x30, 0xee, 0x30, 0xef, 0x30, 0xf0, 0x30, 0xf1, 0x30, 0xf2, 0x30, 0xf3, 0x30, 0xf4, 0x30, 0xf5, 0x30, 0xf6, 0x30, 0x7d, 0xe7, 0x7e, 0xe7, 0x7f, 0xe7, 0x80, 0xe7, 0x81, 0xe7, 0x82, 0xe7, 0x83, 0xe7, 0x84, 0xe7, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, 0x94, 0x03, 0x95, 0x03, 0x96, 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, 0x03, 0x9b, 0x03, 0x9c, 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x03, 0xa6, 0x03, 0xa7, 0x03, 0xa8, 0x03, 0xa9, 0x03, 0x85, 0xe7, 0x86, 0xe7, 0x87, 0xe7, 0x88, 0xe7, 0x89, 0xe7, 0x8a, 0xe7, 0x8b, 0xe7, 0x8c, 0xe7, 0xb1, 0x03, 0xb2, 0x03, 0xb3, 0x03, 0xb4, 0x03, 0xb5, 0x03, 0xb6, 0x03, 0xb7, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbe, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0x8d, 0xe7, 0x8e, 0xe7, 0x8f, 0xe7, 0x90, 0xe7, 0x91, 0xe7, 0x92, 0xe7, 0x93, 0xe7, 0x35, 0xfe, 0x36, 0xfe, 0x39, 0xfe, 0x3a, 0xfe, 0x3f, 0xfe, 0x40, 0xfe, 0x3d, 0xfe, 0x3e, 0xfe, 0x41, 0xfe, 0x42, 0xfe, 0x43, 0xfe, 0x44, 0xfe, 0x94, 0xe7, 0x95, 0xe7, 0x3b, 0xfe, 0x3c, 0xfe, 0x37, 0xfe, 0x38, 0xfe, 0x31, 0xfe, 0x96, 0xe7, 0x33, 0xfe, 0x34, 0xfe, 0x97, 0xe7, 0x98, 0xe7, 0x99, 0xe7, 0x9a, 0xe7, 0x9b, 0xe7, 0x9c, 0xe7, 0x9d, 0xe7, 0x9e, 0xe7, 0x9f, 0xe7, 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13, 0x04, 0x14, 0x04, 0x15, 0x04, 0x01, 0x04, 0x16, 0x04, 0x17, 0x04, 0x18, 0x04, 0x19, 0x04, 0x1a, 0x04, 0x1b, 0x04, 0x1c, 0x04, 0x1d, 0x04, 0x1e, 0x04, 0x1f, 0x04, 0x20, 0x04, 0x21, 0x04, 0x22, 0x04, 0x23, 0x04, 0x24, 0x04, 0x25, 0x04, 0x26, 0x04, 0x27, 0x04, 0x28, 0x04, 0x29, 0x04, 0x2a, 0x04, 0x2b, 0x04, 0x2c, 0x04, 0x2d, 0x04, 0x2e, 0x04, 0x2f, 0x04, 0xa0, 0xe7, 0xa1, 0xe7, 0xa2, 0xe7, 0xa3, 0xe7, 0xa4, 0xe7, 0xa5, 0xe7, 0xa6, 0xe7, 0xa7, 0xe7, 0xa8, 0xe7, 0xa9, 0xe7, 0xaa, 0xe7, 0xab, 0xe7, 0xac, 0xe7, 0xad, 0xe7, 0xae, 0xe7, 0x30, 0x04, 0x31, 0x04, 0x32, 0x04, 0x33, 0x04, 0x34, 0x04, 0x35, 0x04, 0x51, 0x04, 0x36, 0x04, 0x37, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3a, 0x04, 0x3b, 0x04, 0x3c, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x3f, 0x04, 0x40, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x44, 0x04, 0x45, 0x04, 0x46, 0x04, 0x47, 0x04, 0x48, 0x04, 0x49, 0x04, 0x4a, 0x04, 0x4b, 0x04, 0x4c, 0x04, 0x4d, 0x04, 0x4e, 0x04, 0x4f, 0x04, 0xaf, 0xe7, 0xb0, 0xe7, 0xb1, 0xe7, 0xb2, 0xe7, 0xb3, 0xe7, 0xb4, 0xe7, 0xb5, 0xe7, 0xb6, 0xe7, 0xb7, 0xe7, 0xb8, 0xe7, 0xb9, 0xe7, 0xba, 0xe7, 0xbb, 0xe7, 0x01, 0x01, 0xe1, 0x00, 0xce, 0x01, 0xe0, 0x00, 0x13, 0x01, 0xe9, 0x00, 0x1b, 0x01, 0xe8, 0x00, 0x2b, 0x01, 0xed, 0x00, 0xd0, 0x01, 0xec, 0x00, 0x4d, 0x01, 0xf3, 0x00, 0xd2, 0x01, 0xf2, 0x00, 0x6b, 0x01, 0xfa, 0x00, 0xd4, 0x01, 0xf9, 0x00, 0xd6, 0x01, 0xd8, 0x01, 0xda, 0x01, 0xdc, 0x01, 0xfc, 0x00, 0xea, 0x00, 0x51, 0x02, 0xc7, 0xe7, 0x44, 0x01, 0x48, 0x01, 0xc8, 0xe7, 0x61, 0x02, 0xc9, 0xe7, 0xca, 0xe7, 0xcb, 0xe7, 0xcc, 0xe7, 0x05, 0x31, 0x06, 0x31, 0x07, 0x31, 0x08, 0x31, 0x09, 0x31, 0x0a, 0x31, 0x0b, 0x31, 0x0c, 0x31, 0x0d, 0x31, 0x0e, 0x31, 0x0f, 0x31, 0x10, 0x31, 0x11, 0x31, 0x12, 0x31, 0x13, 0x31, 0x14, 0x31, 0x15, 0x31, 0x16, 0x31, 0x17, 0x31, 0x18, 0x31, 0x19, 0x31, 0x1a, 0x31, 0x1b, 0x31, 0x1c, 0x31, 0x1d, 0x31, 0x1e, 0x31, 0x1f, 0x31, 0x20, 0x31, 0x21, 0x31, 0x22, 0x31, 0x23, 0x31, 0x24, 0x31, 0x25, 0x31, 0x26, 0x31, 0x27, 0x31, 0x28, 0x31, 0x29, 0x31, 0xcd, 0xe7, 0xce, 0xe7, 0xcf, 0xe7, 0xd0, 0xe7, 0xd1, 0xe7, 0xd2, 0xe7, 0xd3, 0xe7, 0xd4, 0xe7, 0xd5, 0xe7, 0xd6, 0xe7, 0xd7, 0xe7, 0xd8, 0xe7, 0xd9, 0xe7, 0xda, 0xe7, 0xdb, 0xe7, 0xdc, 0xe7, 0xdd, 0xe7, 0xde, 0xe7, 0xdf, 0xe7, 0xe0, 0xe7, 0xe1, 0xe7, 0xfe, 0xe7, 0xff, 0xe7, 0x00, 0xe8, 0x00, 0x25, 0x01, 0x25, 0x02, 0x25, 0x03, 0x25, 0x04, 0x25, 0x05, 0x25, 0x06, 0x25, 0x07, 0x25, 0x08, 0x25, 0x09, 0x25, 0x0a, 0x25, 0x0b, 0x25, 0x0c, 0x25, 0x0d, 0x25, 0x0e, 0x25, 0x0f, 0x25, 0x10, 0x25, 0x11, 0x25, 0x12, 0x25, 0x13, 0x25, 0x14, 0x25, 0x15, 0x25, 0x16, 0x25, 0x17, 0x25, 0x18, 0x25, 0x19, 0x25, 0x1a, 0x25, 0x1b, 0x25, 0x1c, 0x25, 0x1d, 0x25, 0x1e, 0x25, 0x1f, 0x25, 0x20, 0x25, 0x21, 0x25, 0x22, 0x25, 0x23, 0x25, 0x24, 0x25, 0x25, 0x25, 0x26, 0x25, 0x27, 0x25, 0x28, 0x25, 0x29, 0x25, 0x2a, 0x25, 0x2b, 0x25, 0x2c, 0x25, 0x2d, 0x25, 0x2e, 0x25, 0x2f, 0x25, 0x30, 0x25, 0x31, 0x25, 0x32, 0x25, 0x33, 0x25, 0x34, 0x25, 0x35, 0x25, 0x36, 0x25, 0x37, 0x25, 0x38, 0x25, 0x39, 0x25, 0x3a, 0x25, 0x3b, 0x25, 0x3c, 0x25, 0x3d, 0x25, 0x3e, 0x25, 0x3f, 0x25, 0x40, 0x25, 0x41, 0x25, 0x42, 0x25, 0x43, 0x25, 0x44, 0x25, 0x45, 0x25, 0x46, 0x25, 0x47, 0x25, 0x48, 0x25, 0x49, 0x25, 0x4a, 0x25, 0x4b, 0x25, 0x01, 0xe8, 0x02, 0xe8, 0x03, 0xe8, 0x04, 0xe8, 0x05, 0xe8, 0x06, 0xe8, 0x07, 0xe8, 0x08, 0xe8, 0x09, 0xe8, 0x0a, 0xe8, 0x0b, 0xe8, 0x0c, 0xe8, 0x0d, 0xe8, 0x0e, 0xe8, 0x0f, 0xe8, 0x4a, 0x55, 0x3f, 0x96, 0xc3, 0x57, 0x28, 0x63, 0xce, 0x54, 0x09, 0x55, 0xc0, 0x54, 0x91, 0x76, 0x4c, 0x76, 0x3c, 0x85, 0xee, 0x77, 0x7e, 0x82, 0x8d, 0x78, 0x31, 0x72, 0x98, 0x96, 0x8d, 0x97, 0x28, 0x6c, 0x89, 0x5b, 0xfa, 0x4f, 0x09, 0x63, 0x97, 0x66, 0xb8, 0x5c, 0xfa, 0x80, 0x48, 0x68, 0xae, 0x80, 0x02, 0x66, 0xce, 0x76, 0xf9, 0x51, 0x56, 0x65, 0xac, 0x71, 0xf1, 0x7f, 0x84, 0x88, 0xb2, 0x50, 0x65, 0x59, 0xca, 0x61, 0xb3, 0x6f, 0xad, 0x82, 0x4c, 0x63, 0x52, 0x62, 0xed, 0x53, 0x27, 0x54, 0x06, 0x7b, 0x6b, 0x51, 0xa4, 0x75, 0xf4, 0x5d, 0xd4, 0x62, 0xcb, 0x8d, 0x76, 0x97, 0x8a, 0x62, 0x19, 0x80, 0x5d, 0x57, 0x38, 0x97, 0x62, 0x7f, 0x38, 0x72, 0x7d, 0x76, 0xcf, 0x67, 0x7e, 0x76, 0x46, 0x64, 0x70, 0x4f, 0x25, 0x8d, 0xdc, 0x62, 0x17, 0x7a, 0x91, 0x65, 0xed, 0x73, 0x2c, 0x64, 0x73, 0x62, 0x2c, 0x82, 0x81, 0x98, 0x7f, 0x67, 0x48, 0x72, 0x6e, 0x62, 0xcc, 0x62, 0x34, 0x4f, 0xe3, 0x74, 0x4a, 0x53, 0x9e, 0x52, 0xca, 0x7e, 0xa6, 0x90, 0x2e, 0x5e, 0x86, 0x68, 0x9c, 0x69, 0x80, 0x81, 0xd1, 0x7e, 0xd2, 0x68, 0xc5, 0x78, 0x8c, 0x86, 0x51, 0x95, 0x8d, 0x50, 0x24, 0x8c, 0xde, 0x82, 0xde, 0x80, 0x05, 0x53, 0x12, 0x89, 0x65, 0x52, 0x84, 0x85, 0xf9, 0x96, 0xdd, 0x4f, 0x21, 0x58, 0x71, 0x99, 0x9d, 0x5b, 0xb1, 0x62, 0xa5, 0x62, 0xb4, 0x66, 0x79, 0x8c, 0x8d, 0x9c, 0x06, 0x72, 0x6f, 0x67, 0x91, 0x78, 0xb2, 0x60, 0x51, 0x53, 0x17, 0x53, 0x88, 0x8f, 0xcc, 0x80, 0x1d, 0x8d, 0xa1, 0x94, 0x0d, 0x50, 0xc8, 0x72, 0x07, 0x59, 0xeb, 0x60, 0x19, 0x71, 0xab, 0x88, 0x54, 0x59, 0xef, 0x82, 0x2c, 0x67, 0x28, 0x7b, 0x29, 0x5d, 0xf7, 0x7e, 0x2d, 0x75, 0xf5, 0x6c, 0x66, 0x8e, 0xf8, 0x8f, 0x3c, 0x90, 0x3b, 0x9f, 0xd4, 0x6b, 0x19, 0x91, 0x14, 0x7b, 0x7c, 0x5f, 0xa7, 0x78, 0xd6, 0x84, 0x3d, 0x85, 0xd5, 0x6b, 0xd9, 0x6b, 0xd6, 0x6b, 0x01, 0x5e, 0x87, 0x5e, 0xf9, 0x75, 0xed, 0x95, 0x5d, 0x65, 0x0a, 0x5f, 0xc5, 0x5f, 0x9f, 0x8f, 0xc1, 0x58, 0xc2, 0x81, 0x7f, 0x90, 0x5b, 0x96, 0xad, 0x97, 0xb9, 0x8f, 0x16, 0x7f, 0x2c, 0x8d, 0x41, 0x62, 0xbf, 0x4f, 0xd8, 0x53, 0x5e, 0x53, 0xa8, 0x8f, 0xa9, 0x8f, 0xab, 0x8f, 0x4d, 0x90, 0x07, 0x68, 0x6a, 0x5f, 0x98, 0x81, 0x68, 0x88, 0xd6, 0x9c, 0x8b, 0x61, 0x2b, 0x52, 0x2a, 0x76, 0x6c, 0x5f, 0x8c, 0x65, 0xd2, 0x6f, 0xe8, 0x6e, 0xbe, 0x5b, 0x48, 0x64, 0x75, 0x51, 0xb0, 0x51, 0xc4, 0x67, 0x19, 0x4e, 0xc9, 0x79, 0x7c, 0x99, 0xb3, 0x70, 0xc5, 0x75, 0x76, 0x5e, 0xbb, 0x73, 0xe0, 0x83, 0xad, 0x64, 0xe8, 0x62, 0xb5, 0x94, 0xe2, 0x6c, 0x5a, 0x53, 0xc3, 0x52, 0x0f, 0x64, 0xc2, 0x94, 0x94, 0x7b, 0x2f, 0x4f, 0x1b, 0x5e, 0x36, 0x82, 0x16, 0x81, 0x8a, 0x81, 0x24, 0x6e, 0xca, 0x6c, 0x73, 0x9a, 0x55, 0x63, 0x5c, 0x53, 0xfa, 0x54, 0x65, 0x88, 0xe0, 0x57, 0x0d, 0x4e, 0x03, 0x5e, 0x65, 0x6b, 0x3f, 0x7c, 0xe8, 0x90, 0x16, 0x60, 0xe6, 0x64, 0x1c, 0x73, 0xc1, 0x88, 0x50, 0x67, 0x4d, 0x62, 0x22, 0x8d, 0x6c, 0x77, 0x29, 0x8e, 0xc7, 0x91, 0x69, 0x5f, 0xdc, 0x83, 0x21, 0x85, 0x10, 0x99, 0xc2, 0x53, 0x95, 0x86, 0x8b, 0x6b, 0xed, 0x60, 0xe8, 0x60, 0x7f, 0x70, 0xcd, 0x82, 0x31, 0x82, 0xd3, 0x4e, 0xa7, 0x6c, 0xcf, 0x85, 0xcd, 0x64, 0xd9, 0x7c, 0xfd, 0x69, 0xf9, 0x66, 0x49, 0x83, 0x95, 0x53, 0x56, 0x7b, 0xa7, 0x4f, 0x8c, 0x51, 0x4b, 0x6d, 0x42, 0x5c, 0x6d, 0x8e, 0xd2, 0x63, 0xc9, 0x53, 0x2c, 0x83, 0x36, 0x83, 0xe5, 0x67, 0xb4, 0x78, 0x3d, 0x64, 0xdf, 0x5b, 0x94, 0x5c, 0xee, 0x5d, 0xe7, 0x8b, 0xc6, 0x62, 0xf4, 0x67, 0x7a, 0x8c, 0x00, 0x64, 0xba, 0x63, 0x49, 0x87, 0x8b, 0x99, 0x17, 0x8c, 0x20, 0x7f, 0xf2, 0x94, 0xa7, 0x4e, 0x10, 0x96, 0xa4, 0x98, 0x0c, 0x66, 0x16, 0x73, 0x3a, 0x57, 0x1d, 0x5c, 0x38, 0x5e, 0x7f, 0x95, 0x7f, 0x50, 0xa0, 0x80, 0x82, 0x53, 0x5e, 0x65, 0x45, 0x75, 0x31, 0x55, 0x21, 0x50, 0x85, 0x8d, 0x84, 0x62, 0x9e, 0x94, 0x1d, 0x67, 0x32, 0x56, 0x6e, 0x6f, 0xe2, 0x5d, 0x35, 0x54, 0x92, 0x70, 0x66, 0x8f, 0x6f, 0x62, 0xa4, 0x64, 0xa3, 0x63, 0x7b, 0x5f, 0x88, 0x6f, 0xf4, 0x90, 0xe3, 0x81, 0xb0, 0x8f, 0x18, 0x5c, 0x68, 0x66, 0xf1, 0x5f, 0x89, 0x6c, 0x48, 0x96, 0x81, 0x8d, 0x6c, 0x88, 0x91, 0x64, 0xf0, 0x79, 0xce, 0x57, 0x59, 0x6a, 0x10, 0x62, 0x48, 0x54, 0x58, 0x4e, 0x0b, 0x7a, 0xe9, 0x60, 0x84, 0x6f, 0xda, 0x8b, 0x7f, 0x62, 0x1e, 0x90, 0x8b, 0x9a, 0xe4, 0x79, 0x03, 0x54, 0xf4, 0x75, 0x01, 0x63, 0x19, 0x53, 0x60, 0x6c, 0xdf, 0x8f, 0x1b, 0x5f, 0x70, 0x9a, 0x3b, 0x80, 0x7f, 0x9f, 0x88, 0x4f, 0x3a, 0x5c, 0x64, 0x8d, 0xc5, 0x7f, 0xa5, 0x65, 0xbd, 0x70, 0x45, 0x51, 0xb2, 0x51, 0x6b, 0x86, 0x07, 0x5d, 0xa0, 0x5b, 0xbd, 0x62, 0x6c, 0x91, 0x74, 0x75, 0x0c, 0x8e, 0x20, 0x7a, 0x01, 0x61, 0x79, 0x7b, 0xc7, 0x4e, 0xf8, 0x7e, 0x85, 0x77, 0x11, 0x4e, 0xed, 0x81, 0x1d, 0x52, 0xfa, 0x51, 0x71, 0x6a, 0xa8, 0x53, 0x87, 0x8e, 0x04, 0x95, 0xcf, 0x96, 0xc1, 0x6e, 0x64, 0x96, 0x5a, 0x69, 0x40, 0x78, 0xa8, 0x50, 0xd7, 0x77, 0x10, 0x64, 0xe6, 0x89, 0x04, 0x59, 0xe3, 0x63, 0xdd, 0x5d, 0x7f, 0x7a, 0x3d, 0x69, 0x20, 0x4f, 0x39, 0x82, 0x98, 0x55, 0x32, 0x4e, 0xae, 0x75, 0x97, 0x7a, 0x62, 0x5e, 0x8a, 0x5e, 0xef, 0x95, 0x1b, 0x52, 0x39, 0x54, 0x8a, 0x70, 0x76, 0x63, 0x24, 0x95, 0x82, 0x57, 0x25, 0x66, 0x3f, 0x69, 0x87, 0x91, 0x07, 0x55, 0xf3, 0x6d, 0xaf, 0x7e, 0x22, 0x88, 0x33, 0x62, 0xf0, 0x7e, 0xb5, 0x75, 0x28, 0x83, 0xc1, 0x78, 0xcc, 0x96, 0x9e, 0x8f, 0x48, 0x61, 0xf7, 0x74, 0xcd, 0x8b, 0x64, 0x6b, 0x3a, 0x52, 0x50, 0x8d, 0x21, 0x6b, 0x6a, 0x80, 0x71, 0x84, 0xf1, 0x56, 0x06, 0x53, 0xce, 0x4e, 0x1b, 0x4e, 0xd1, 0x51, 0x97, 0x7c, 0x8b, 0x91, 0x07, 0x7c, 0xc3, 0x4f, 0x7f, 0x8e, 0xe1, 0x7b, 0x9c, 0x7a, 0x67, 0x64, 0x14, 0x5d, 0xac, 0x50, 0x06, 0x81, 0x01, 0x76, 0xb9, 0x7c, 0xec, 0x6d, 0xe0, 0x7f, 0x51, 0x67, 0x58, 0x5b, 0xf8, 0x5b, 0xcb, 0x78, 0xae, 0x64, 0x13, 0x64, 0xaa, 0x63, 0x2b, 0x63, 0x19, 0x95, 0x2d, 0x64, 0xbe, 0x8f, 0x54, 0x7b, 0x29, 0x76, 0x53, 0x62, 0x27, 0x59, 0x46, 0x54, 0x79, 0x6b, 0xa3, 0x50, 0x34, 0x62, 0x26, 0x5e, 0x86, 0x6b, 0xe3, 0x4e, 0x37, 0x8d, 0x8b, 0x88, 0x85, 0x5f, 0x2e, 0x90, 0x20, 0x60, 0x3d, 0x80, 0xc5, 0x62, 0x39, 0x4e, 0x55, 0x53, 0xf8, 0x90, 0xb8, 0x63, 0xc6, 0x80, 0xe6, 0x65, 0x2e, 0x6c, 0x46, 0x4f, 0xee, 0x60, 0xe1, 0x6d, 0xde, 0x8b, 0x39, 0x5f, 0xcb, 0x86, 0x53, 0x5f, 0x21, 0x63, 0x5a, 0x51, 0x61, 0x83, 0x63, 0x68, 0x00, 0x52, 0x63, 0x63, 0x48, 0x8e, 0x12, 0x50, 0x9b, 0x5c, 0x77, 0x79, 0xfc, 0x5b, 0x30, 0x52, 0x3b, 0x7a, 0xbc, 0x60, 0x53, 0x90, 0xd7, 0x76, 0xb7, 0x5f, 0x97, 0x5f, 0x84, 0x76, 0x6c, 0x8e, 0x6f, 0x70, 0x7b, 0x76, 0x49, 0x7b, 0xaa, 0x77, 0xf3, 0x51, 0x93, 0x90, 0x24, 0x58, 0x4e, 0x4f, 0xf4, 0x6e, 0xea, 0x8f, 0x4c, 0x65, 0x1b, 0x7b, 0xc4, 0x72, 0xa4, 0x6d, 0xdf, 0x7f, 0xe1, 0x5a, 0xb5, 0x62, 0x95, 0x5e, 0x30, 0x57, 0x82, 0x84, 0x2c, 0x7b, 0x1d, 0x5e, 0x1f, 0x5f, 0x12, 0x90, 0x14, 0x7f, 0xa0, 0x98, 0x82, 0x63, 0xc7, 0x6e, 0x98, 0x78, 0xb9, 0x70, 0x78, 0x51, 0x5b, 0x97, 0xab, 0x57, 0x35, 0x75, 0x43, 0x4f, 0x38, 0x75, 0x97, 0x5e, 0xe6, 0x60, 0x60, 0x59, 0xc0, 0x6d, 0xbf, 0x6b, 0x89, 0x78, 0xfc, 0x53, 0xd5, 0x96, 0xcb, 0x51, 0x01, 0x52, 0x89, 0x63, 0x0a, 0x54, 0x93, 0x94, 0x03, 0x8c, 0xcc, 0x8d, 0x39, 0x72, 0x9f, 0x78, 0x76, 0x87, 0xed, 0x8f, 0x0d, 0x8c, 0xe0, 0x53, 0x01, 0x4e, 0xef, 0x76, 0xee, 0x53, 0x89, 0x94, 0x76, 0x98, 0x0e, 0x9f, 0x2d, 0x95, 0x9a, 0x5b, 0xa2, 0x8b, 0x22, 0x4e, 0x1c, 0x4e, 0xac, 0x51, 0x63, 0x84, 0xc2, 0x61, 0xa8, 0x52, 0x0b, 0x68, 0x97, 0x4f, 0x6b, 0x60, 0xbb, 0x51, 0x1e, 0x6d, 0x5c, 0x51, 0x96, 0x62, 0x97, 0x65, 0x61, 0x96, 0x46, 0x8c, 0x17, 0x90, 0xd8, 0x75, 0xfd, 0x90, 0x63, 0x77, 0xd2, 0x6b, 0x8a, 0x72, 0xec, 0x72, 0xfb, 0x8b, 0x35, 0x58, 0x79, 0x77, 0x4c, 0x8d, 0x5c, 0x67, 0x40, 0x95, 0x9a, 0x80, 0xa6, 0x5e, 0x21, 0x6e, 0x92, 0x59, 0xef, 0x7a, 0xed, 0x77, 0x3b, 0x95, 0xb5, 0x6b, 0xad, 0x65, 0x0e, 0x7f, 0x06, 0x58, 0x51, 0x51, 0x1f, 0x96, 0xf9, 0x5b, 0xa9, 0x58, 0x28, 0x54, 0x72, 0x8e, 0x66, 0x65, 0x7f, 0x98, 0xe4, 0x56, 0x9d, 0x94, 0xfe, 0x76, 0x41, 0x90, 0x87, 0x63, 0xc6, 0x54, 0x1a, 0x59, 0x3a, 0x59, 0x9b, 0x57, 0xb2, 0x8e, 0x35, 0x67, 0xfa, 0x8d, 0x35, 0x82, 0x41, 0x52, 0xf0, 0x60, 0x15, 0x58, 0xfe, 0x86, 0xe8, 0x5c, 0x45, 0x9e, 0xc4, 0x4f, 0x9d, 0x98, 0xb9, 0x8b, 0x25, 0x5a, 0x76, 0x60, 0x84, 0x53, 0x7c, 0x62, 0x4f, 0x90, 0x02, 0x91, 0x7f, 0x99, 0x69, 0x60, 0x0c, 0x80, 0x3f, 0x51, 0x33, 0x80, 0x14, 0x5c, 0x75, 0x99, 0x31, 0x6d, 0x8c, 0x4e, 0x30, 0x8d, 0xd1, 0x53, 0x5a, 0x7f, 0x4f, 0x7b, 0x10, 0x4f, 0x4f, 0x4e, 0x00, 0x96, 0xd5, 0x6c, 0xd0, 0x73, 0xe9, 0x85, 0x06, 0x5e, 0x6a, 0x75, 0xfb, 0x7f, 0x0a, 0x6a, 0xfe, 0x77, 0x92, 0x94, 0x41, 0x7e, 0xe1, 0x51, 0xe6, 0x70, 0xcd, 0x53, 0xd4, 0x8f, 0x03, 0x83, 0x29, 0x8d, 0xaf, 0x72, 0x6d, 0x99, 0xdb, 0x6c, 0x4a, 0x57, 0xb3, 0x82, 0xb9, 0x65, 0xaa, 0x80, 0x3f, 0x62, 0x32, 0x96, 0xa8, 0x59, 0xff, 0x4e, 0xbf, 0x8b, 0xba, 0x7e, 0x3e, 0x65, 0xf2, 0x83, 0x5e, 0x97, 0x61, 0x55, 0xde, 0x98, 0xa5, 0x80, 0x2a, 0x53, 0xfd, 0x8b, 0x20, 0x54, 0xba, 0x80, 0x9f, 0x5e, 0xb8, 0x6c, 0x39, 0x8d, 0xac, 0x82, 0x5a, 0x91, 0x29, 0x54, 0x1b, 0x6c, 0x06, 0x52, 0xb7, 0x7e, 0x5f, 0x57, 0x1a, 0x71, 0x7e, 0x6c, 0x89, 0x7c, 0x4b, 0x59, 0xfd, 0x4e, 0xff, 0x5f, 0x24, 0x61, 0xaa, 0x7c, 0x30, 0x4e, 0x01, 0x5c, 0xab, 0x67, 0x02, 0x87, 0xf0, 0x5c, 0x0b, 0x95, 0xce, 0x98, 0xaf, 0x75, 0xfd, 0x70, 0x22, 0x90, 0xaf, 0x51, 0x1d, 0x7f, 0xbd, 0x8b, 0x49, 0x59, 0xe4, 0x51, 0x5b, 0x4f, 0x26, 0x54, 0x2b, 0x59, 0x77, 0x65, 0xa4, 0x80, 0x75, 0x5b, 0x76, 0x62, 0xc2, 0x62, 0x90, 0x8f, 0x45, 0x5e, 0x1f, 0x6c, 0x26, 0x7b, 0x0f, 0x4f, 0xd8, 0x4f, 0x0d, 0x67, 0x6e, 0x6d, 0xaa, 0x6d, 0x8f, 0x79, 0xb1, 0x88, 0x17, 0x5f, 0x2b, 0x75, 0x9a, 0x62, 0x85, 0x8f, 0xef, 0x4f, 0xdc, 0x91, 0xa7, 0x65, 0x2f, 0x81, 0x51, 0x81, 0x9c, 0x5e, 0x50, 0x81, 0x74, 0x8d, 0x6f, 0x52, 0x86, 0x89, 0x4b, 0x8d, 0x0d, 0x59, 0x85, 0x50, 0xd8, 0x4e, 0x1c, 0x96, 0x36, 0x72, 0x79, 0x81, 0x1f, 0x8d, 0xcc, 0x5b, 0xa3, 0x8b, 0x44, 0x96, 0x87, 0x59, 0x1a, 0x7f, 0x90, 0x54, 0x76, 0x56, 0x0e, 0x56, 0xe5, 0x8b, 0x39, 0x65, 0x82, 0x69, 0x99, 0x94, 0xd6, 0x76, 0x89, 0x6e, 0x72, 0x5e, 0x18, 0x75, 0x46, 0x67, 0xd1, 0x67, 0xff, 0x7a, 0x9d, 0x80, 0x76, 0x8d, 0x1f, 0x61, 0xc6, 0x79, 0x62, 0x65, 0x63, 0x8d, 0x88, 0x51, 0x1a, 0x52, 0xa2, 0x94, 0x38, 0x7f, 0x9b, 0x80, 0xb2, 0x7e, 0x97, 0x5c, 0x2f, 0x6e, 0x60, 0x67, 0xd9, 0x7b, 0x8b, 0x76, 0xd8, 0x9a, 0x8f, 0x81, 0x94, 0x7f, 0xd5, 0x7c, 0x1e, 0x64, 0x50, 0x95, 0x3f, 0x7a, 0x4a, 0x54, 0xe5, 0x54, 0x4c, 0x6b, 0x01, 0x64, 0x08, 0x62, 0x3d, 0x9e, 0xf3, 0x80, 0x99, 0x75, 0x72, 0x52, 0x69, 0x97, 0x5b, 0x84, 0x3c, 0x68, 0xe4, 0x86, 0x01, 0x96, 0x94, 0x96, 0xec, 0x94, 0x2a, 0x4e, 0x04, 0x54, 0xd9, 0x7e, 0x39, 0x68, 0xdf, 0x8d, 0x15, 0x80, 0xf4, 0x66, 0x9a, 0x5e, 0xb9, 0x7f, 0xc2, 0x57, 0x3f, 0x80, 0x97, 0x68, 0xe5, 0x5d, 0x3b, 0x65, 0x9f, 0x52, 0x6d, 0x60, 0x9a, 0x9f, 0x9b, 0x4f, 0xac, 0x8e, 0x6c, 0x51, 0xab, 0x5b, 0x13, 0x5f, 0xe9, 0x5d, 0x5e, 0x6c, 0xf1, 0x62, 0x21, 0x8d, 0x71, 0x51, 0xa9, 0x94, 0xfe, 0x52, 0x9f, 0x6c, 0xdf, 0x82, 0xd7, 0x72, 0xa2, 0x57, 0x84, 0x67, 0x2d, 0x8d, 0x1f, 0x59, 0x9c, 0x8f, 0xc7, 0x83, 0x95, 0x54, 0x8d, 0x7b, 0x30, 0x4f, 0xbd, 0x6c, 0x64, 0x5b, 0xd1, 0x59, 0x13, 0x9f, 0xe4, 0x53, 0xca, 0x86, 0xa8, 0x9a, 0x37, 0x8c, 0xa1, 0x80, 0x45, 0x65, 0x7e, 0x98, 0xfa, 0x56, 0xc7, 0x96, 0x2e, 0x52, 0xdc, 0x74, 0x50, 0x52, 0xe1, 0x5b, 0x02, 0x63, 0x02, 0x89, 0x56, 0x4e, 0xd0, 0x62, 0x2a, 0x60, 0xfa, 0x68, 0x73, 0x51, 0x98, 0x5b, 0xa0, 0x51, 0xc2, 0x89, 0xa1, 0x7b, 0x86, 0x99, 0x50, 0x7f, 0xef, 0x60, 0x4c, 0x70, 0x2f, 0x8d, 0x49, 0x51, 0x7f, 0x5e, 0x1b, 0x90, 0x70, 0x74, 0xc4, 0x89, 0x2d, 0x57, 0x45, 0x78, 0x52, 0x5f, 0x9f, 0x9f, 0xfa, 0x95, 0x68, 0x8f, 0x3c, 0x9b, 0xe1, 0x8b, 0x78, 0x76, 0x42, 0x68, 0xdc, 0x67, 0xea, 0x8d, 0x35, 0x8d, 0x3d, 0x52, 0x8a, 0x8f, 0xda, 0x6e, 0xcd, 0x68, 0x05, 0x95, 0xed, 0x90, 0xfd, 0x56, 0x9c, 0x67, 0xf9, 0x88, 0xc7, 0x8f, 0xc8, 0x54, 0xb8, 0x9a, 0x69, 0x5b, 0x77, 0x6d, 0x26, 0x6c, 0xa5, 0x4e, 0xb3, 0x5b, 0x87, 0x9a, 0x63, 0x91, 0xa8, 0x61, 0xaf, 0x90, 0xe9, 0x97, 0x2b, 0x54, 0xb5, 0x6d, 0xd2, 0x5b, 0xfd, 0x51, 0x8a, 0x55, 0x55, 0x7f, 0xf0, 0x7f, 0xbc, 0x64, 0x4d, 0x63, 0xf1, 0x65, 0xbe, 0x61, 0x8d, 0x60, 0x0a, 0x71, 0x57, 0x6c, 0x49, 0x6c, 0x2f, 0x59, 0x6d, 0x67, 0x2a, 0x82, 0xd5, 0x58, 0x8e, 0x56, 0x6a, 0x8c, 0xeb, 0x6b, 0xdd, 0x90, 0x7d, 0x59, 0x17, 0x80, 0xf7, 0x53, 0x69, 0x6d, 0x75, 0x54, 0x9d, 0x55, 0x77, 0x83, 0xcf, 0x83, 0x38, 0x68, 0xbe, 0x79, 0x8c, 0x54, 0x55, 0x4f, 0x08, 0x54, 0xd2, 0x76, 0x89, 0x8c, 0x02, 0x96, 0xb3, 0x6c, 0xb8, 0x6d, 0x6b, 0x8d, 0x10, 0x89, 0x64, 0x9e, 0x3a, 0x8d, 0x3f, 0x56, 0xd1, 0x9e, 0xd5, 0x75, 0x88, 0x5f, 0xe0, 0x72, 0x68, 0x60, 0xfc, 0x54, 0xa8, 0x4e, 0x2a, 0x6a, 0x61, 0x88, 0x52, 0x60, 0x70, 0x8f, 0xc4, 0x54, 0xd8, 0x70, 0x79, 0x86, 0x3f, 0x9e, 0x2a, 0x6d, 0x8f, 0x5b, 0x18, 0x5f, 0xa2, 0x7e, 0x89, 0x55, 0xaf, 0x4f, 0x34, 0x73, 0x3c, 0x54, 0x9a, 0x53, 0x19, 0x50, 0x0e, 0x54, 0x7c, 0x54, 0x4e, 0x4e, 0xfd, 0x5f, 0x5a, 0x74, 0xf6, 0x58, 0x6b, 0x84, 0xe1, 0x80, 0x74, 0x87, 0xd0, 0x72, 0xca, 0x7c, 0x56, 0x6e, 0x27, 0x5f, 0x4e, 0x86, 0x2c, 0x55, 0xa4, 0x62, 0x92, 0x4e, 0xaa, 0x6c, 0x37, 0x62, 0xb1, 0x82, 0xd7, 0x54, 0x4e, 0x53, 0x3e, 0x73, 0xd1, 0x6e, 0x3b, 0x75, 0x12, 0x52, 0x16, 0x53, 0xdd, 0x8b, 0xd0, 0x69, 0x8a, 0x5f, 0x00, 0x60, 0xee, 0x6d, 0x4f, 0x57, 0x22, 0x6b, 0xaf, 0x73, 0x53, 0x68, 0xd8, 0x8f, 0x13, 0x7f, 0x62, 0x63, 0xa3, 0x60, 0x24, 0x55, 0xea, 0x75, 0x62, 0x8c, 0x15, 0x71, 0xa3, 0x6d, 0xa6, 0x5b, 0x7b, 0x5e, 0x52, 0x83, 0x4c, 0x61, 0xc4, 0x9e, 0xfa, 0x78, 0x57, 0x87, 0x27, 0x7c, 0x87, 0x76, 0xf0, 0x51, 0xf6, 0x60, 0x4c, 0x71, 0x43, 0x66, 0x4c, 0x5e, 0x4d, 0x60, 0x0e, 0x8c, 0x70, 0x70, 0x25, 0x63, 0x89, 0x8f, 0xbd, 0x5f, 0x62, 0x60, 0xd4, 0x86, 0xde, 0x56, 0xc1, 0x6b, 0x94, 0x60, 0x67, 0x61, 0x49, 0x53, 0xe0, 0x60, 0x66, 0x66, 0x3f, 0x8d, 0xfd, 0x79, 0x1a, 0x4f, 0xe9, 0x70, 0x47, 0x6c, 0xb3, 0x8b, 0xf2, 0x8b, 0xd8, 0x7e, 0x64, 0x83, 0x0f, 0x66, 0x5a, 0x5a, 0x42, 0x9b, 0x51, 0x6d, 0xf7, 0x6d, 0x41, 0x8c, 0x3b, 0x6d, 0x19, 0x4f, 0x6b, 0x70, 0xb7, 0x83, 0x16, 0x62, 0xd1, 0x60, 0x0d, 0x97, 0x27, 0x8d, 0x78, 0x79, 0xfb, 0x51, 0x3e, 0x57, 0xfa, 0x57, 0x3a, 0x67, 0x78, 0x75, 0x3d, 0x7a, 0xef, 0x79, 0x95, 0x7b, 0x8c, 0x80, 0x65, 0x99, 0xf9, 0x8f, 0xc0, 0x6f, 0xa5, 0x8b, 0x21, 0x9e, 0xec, 0x59, 0xe9, 0x7e, 0x09, 0x7f, 0x09, 0x54, 0x81, 0x67, 0xd8, 0x68, 0x91, 0x8f, 0x4d, 0x7c, 0xc6, 0x96, 0xca, 0x53, 0x25, 0x60, 0xbe, 0x75, 0x72, 0x6c, 0x73, 0x53, 0xc9, 0x5a, 0xa7, 0x7e, 0x24, 0x63, 0xe0, 0x51, 0x0a, 0x81, 0xf1, 0x5d, 0xdf, 0x84, 0x80, 0x62, 0x80, 0x51, 0x63, 0x5b, 0x0e, 0x4f, 0x6d, 0x79, 0x42, 0x52, 0xb8, 0x60, 0x4e, 0x6d, 0xc4, 0x5b, 0xc2, 0x5b, 0xa1, 0x8b, 0xb0, 0x8b, 0xe2, 0x65, 0xcc, 0x5f, 0x45, 0x96, 0x93, 0x59, 0xe7, 0x7e, 0xaa, 0x7e, 0x09, 0x56, 0xb7, 0x67, 0x39, 0x59, 0x73, 0x4f, 0xb6, 0x5b, 0xa0, 0x52, 0x5a, 0x83, 0x8a, 0x98, 0x3e, 0x8d, 0x32, 0x75, 0xbe, 0x94, 0x47, 0x50, 0x3c, 0x7a, 0xf7, 0x4e, 0xb6, 0x67, 0x7e, 0x9a, 0xc1, 0x5a, 0x7c, 0x6b, 0xd1, 0x76, 0x5a, 0x57, 0x16, 0x5c, 0x3a, 0x7b, 0xf4, 0x95, 0x4e, 0x71, 0x7c, 0x51, 0xa9, 0x80, 0x70, 0x82, 0x78, 0x59, 0x04, 0x7f, 0x27, 0x83, 0xc0, 0x68, 0xec, 0x67, 0xb1, 0x78, 0x77, 0x78, 0xe3, 0x62, 0x61, 0x63, 0x80, 0x7b, 0xed, 0x4f, 0x6a, 0x52, 0xcf, 0x51, 0x50, 0x83, 0xdb, 0x69, 0x74, 0x92, 0xf5, 0x8d, 0x31, 0x8d, 0xc1, 0x89, 0x2e, 0x95, 0xad, 0x7b, 0xf6, 0x4e, 0x65, 0x50, 0x30, 0x82, 0x51, 0x52, 0x6f, 0x99, 0x10, 0x6e, 0x85, 0x6e, 0xa7, 0x6d, 0xfa, 0x5e, 0xf5, 0x50, 0xdc, 0x59, 0x06, 0x5c, 0x46, 0x6d, 0x5f, 0x6c, 0x86, 0x75, 0x8b, 0x84, 0x68, 0x68, 0x56, 0x59, 0xb2, 0x8b, 0x20, 0x53, 0x71, 0x91, 0x4d, 0x96, 0x49, 0x85, 0x12, 0x69, 0x01, 0x79, 0x26, 0x71, 0xf6, 0x80, 0xa4, 0x4e, 0xca, 0x90, 0x47, 0x6d, 0x84, 0x9a, 0x07, 0x5a, 0xbc, 0x56, 0x05, 0x64, 0xf0, 0x94, 0xeb, 0x77, 0xa5, 0x4f, 0x1a, 0x81, 0xe1, 0x72, 0xd2, 0x89, 0x7a, 0x99, 0x34, 0x7f, 0xde, 0x7e, 0x7f, 0x52, 0x59, 0x65, 0x75, 0x91, 0x7f, 0x8f, 0x83, 0x8f, 0xeb, 0x53, 0x96, 0x7a, 0xed, 0x63, 0xa5, 0x63, 0x86, 0x76, 0xf8, 0x79, 0x57, 0x88, 0x36, 0x96, 0x2a, 0x62, 0xab, 0x52, 0x82, 0x82, 0x54, 0x68, 0x70, 0x67, 0x77, 0x63, 0x6b, 0x77, 0xed, 0x7a, 0x01, 0x6d, 0xd3, 0x7e, 0xe3, 0x89, 0xd0, 0x59, 0x12, 0x62, 0xc9, 0x85, 0xa5, 0x82, 0x4c, 0x75, 0x1f, 0x50, 0xcb, 0x4e, 0xa5, 0x75, 0xeb, 0x8b, 0x4a, 0x5c, 0xfe, 0x5d, 0x4b, 0x7b, 0xa4, 0x65, 0xd1, 0x91, 0xca, 0x4e, 0x25, 0x6d, 0x5f, 0x89, 0x27, 0x7d, 0x26, 0x95, 0xc5, 0x4e, 0x28, 0x8c, 0xdb, 0x8f, 0x73, 0x97, 0x4b, 0x66, 0x81, 0x79, 0xd1, 0x8f, 0xec, 0x70, 0x78, 0x6d, 0x3d, 0x5c, 0xb2, 0x52, 0x46, 0x83, 0x62, 0x51, 0x0e, 0x83, 0x5b, 0x77, 0x76, 0x66, 0xb8, 0x9c, 0xac, 0x4e, 0xca, 0x60, 0xbe, 0x7c, 0xb3, 0x7c, 0xcf, 0x7e, 0x95, 0x4e, 0x66, 0x8b, 0x6f, 0x66, 0x88, 0x98, 0x59, 0x97, 0x83, 0x58, 0x6c, 0x65, 0x5c, 0x95, 0x84, 0x5f, 0xc9, 0x75, 0x56, 0x97, 0xdf, 0x7a, 0xde, 0x7a, 0xc0, 0x51, 0xaf, 0x70, 0x98, 0x7a, 0xea, 0x63, 0x76, 0x7a, 0xa0, 0x7e, 0x96, 0x73, 0xed, 0x97, 0x45, 0x4e, 0x78, 0x70, 0x5d, 0x4e, 0x52, 0x91, 0xa9, 0x53, 0x51, 0x65, 0xe7, 0x65, 0xfc, 0x81, 0x05, 0x82, 0x8e, 0x54, 0x31, 0x5c, 0x9a, 0x75, 0xa0, 0x97, 0xd8, 0x62, 0xd9, 0x72, 0xbd, 0x75, 0x45, 0x5c, 0x79, 0x9a, 0xca, 0x83, 0x40, 0x5c, 0x80, 0x54, 0xe9, 0x77, 0x3e, 0x4e, 0xae, 0x6c, 0x5a, 0x80, 0xd2, 0x62, 0x6e, 0x63, 0xe8, 0x5d, 0x77, 0x51, 0xdd, 0x8d, 0x1e, 0x8e, 0x2f, 0x95, 0xf1, 0x4f, 0xe5, 0x53, 0xe7, 0x60, 0xac, 0x70, 0x67, 0x52, 0x50, 0x63, 0x43, 0x9e, 0x1f, 0x5a, 0x26, 0x50, 0x37, 0x77, 0x77, 0x53, 0xe2, 0x7e, 0x85, 0x64, 0x2b, 0x65, 0x89, 0x62, 0x98, 0x63, 0x14, 0x50, 0x35, 0x72, 0xc9, 0x89, 0xb3, 0x51, 0xc0, 0x8b, 0xdd, 0x7e, 0x47, 0x57, 0xcc, 0x83, 0xa7, 0x94, 0x9b, 0x51, 0x1b, 0x54, 0xfb, 0x5c, 0xca, 0x4f, 0xe3, 0x7a, 0x5a, 0x6d, 0xe1, 0x90, 0x8f, 0x9a, 0x80, 0x55, 0x96, 0x54, 0x61, 0x53, 0xaf, 0x54, 0x00, 0x5f, 0xe9, 0x63, 0x77, 0x69, 0xef, 0x51, 0x68, 0x61, 0x0a, 0x52, 0x2a, 0x58, 0xd8, 0x52, 0x4e, 0x57, 0x0d, 0x78, 0x0b, 0x77, 0xb7, 0x5e, 0x77, 0x61, 0xe0, 0x7c, 0x5b, 0x62, 0x97, 0x62, 0xa2, 0x4e, 0x95, 0x70, 0x03, 0x80, 0xf7, 0x62, 0xe4, 0x70, 0x60, 0x97, 0x77, 0x57, 0xdb, 0x82, 0xef, 0x67, 0xf5, 0x68, 0xd5, 0x78, 0x97, 0x98, 0xd1, 0x79, 0xf3, 0x58, 0xb3, 0x54, 0xef, 0x53, 0x34, 0x6e, 0x4b, 0x51, 0x3b, 0x52, 0xa2, 0x5b, 0xfe, 0x8b, 0xaf, 0x80, 0x43, 0x55, 0xa6, 0x57, 0x73, 0x60, 0x51, 0x57, 0x2d, 0x54, 0x7a, 0x7a, 0x50, 0x60, 0x54, 0x5b, 0xa7, 0x63, 0xa0, 0x62, 0xe3, 0x53, 0x63, 0x62, 0xc7, 0x5b, 0xaf, 0x67, 0xed, 0x54, 0x9f, 0x7a, 0xe6, 0x82, 0x77, 0x91, 0x93, 0x5e, 0xe4, 0x88, 0x38, 0x59, 0xae, 0x57, 0x0e, 0x63, 0xe8, 0x8d, 0xef, 0x80, 0x57, 0x57, 0x77, 0x7b, 0xa9, 0x4f, 0xeb, 0x5f, 0xbd, 0x5b, 0x3e, 0x6b, 0x21, 0x53, 0x50, 0x7b, 0xc2, 0x72, 0x46, 0x68, 0xff, 0x77, 0x36, 0x77, 0xf7, 0x65, 0xb5, 0x51, 0x8f, 0x4e, 0xd4, 0x76, 0xbf, 0x5c, 0xa5, 0x7a, 0x75, 0x84, 0x4e, 0x59, 0x41, 0x9b, 0x80, 0x50, 0x88, 0x99, 0x27, 0x61, 0x83, 0x6e, 0x64, 0x57, 0x06, 0x66, 0x46, 0x63, 0xf0, 0x56, 0xec, 0x62, 0x69, 0x62, 0xd3, 0x5e, 0x14, 0x96, 0x83, 0x57, 0xc9, 0x62, 0x87, 0x55, 0x21, 0x87, 0x4a, 0x81, 0xa3, 0x8f, 0x66, 0x55, 0xb1, 0x83, 0x65, 0x67, 0x56, 0x8d, 0xdd, 0x84, 0x6a, 0x5a, 0x0f, 0x68, 0xe6, 0x62, 0xee, 0x7b, 0x11, 0x96, 0x70, 0x51, 0x9c, 0x6f, 0x30, 0x8c, 0xfd, 0x63, 0xc8, 0x89, 0xd2, 0x61, 0x06, 0x7f, 0xc2, 0x70, 0xe5, 0x6e, 0x05, 0x74, 0x94, 0x69, 0xfc, 0x72, 0xca, 0x5e, 0xce, 0x90, 0x17, 0x67, 0x6a, 0x6d, 0x5e, 0x63, 0xb3, 0x52, 0x62, 0x72, 0x01, 0x80, 0x6c, 0x4f, 0xe5, 0x59, 0x6a, 0x91, 0xd9, 0x70, 0x9d, 0x6d, 0xd2, 0x52, 0x50, 0x4e, 0xf7, 0x96, 0x6d, 0x95, 0x7e, 0x85, 0xca, 0x78, 0x2f, 0x7d, 0x21, 0x51, 0x92, 0x57, 0xc2, 0x64, 0x8b, 0x80, 0x7b, 0x7c, 0xea, 0x6c, 0xf1, 0x68, 0x5e, 0x69, 0xb7, 0x51, 0x98, 0x53, 0xa8, 0x68, 0x81, 0x72, 0xce, 0x9e, 0xf1, 0x7b, 0xf8, 0x72, 0xbb, 0x79, 0x13, 0x6f, 0x06, 0x74, 0x4e, 0x67, 0xcc, 0x91, 0xa4, 0x9c, 0x3c, 0x79, 0x89, 0x83, 0x54, 0x83, 0x0f, 0x54, 0x17, 0x68, 0x3d, 0x4e, 0x89, 0x53, 0xb1, 0x52, 0x3e, 0x78, 0x86, 0x53, 0x29, 0x52, 0x88, 0x50, 0x8b, 0x4f, 0xd0, 0x4f, 0xe2, 0x75, 0xcb, 0x7a, 0x92, 0x7c, 0xa5, 0x6c, 0xb6, 0x96, 0x9b, 0x52, 0x83, 0x74, 0xe9, 0x54, 0xe9, 0x4f, 0x54, 0x80, 0xb2, 0x83, 0xde, 0x8f, 0x70, 0x95, 0xc9, 0x5e, 0x1c, 0x60, 0x9f, 0x6d, 0x18, 0x5e, 0x5b, 0x65, 0x38, 0x81, 0xfe, 0x94, 0x4b, 0x60, 0xbc, 0x70, 0xc3, 0x7e, 0xae, 0x7c, 0xc9, 0x51, 0x81, 0x68, 0xb1, 0x7c, 0x6f, 0x82, 0x24, 0x4e, 0x86, 0x8f, 0xcf, 0x91, 0x7e, 0x66, 0xae, 0x4e, 0x05, 0x8c, 0xa9, 0x64, 0x4a, 0x80, 0xda, 0x50, 0x97, 0x75, 0xce, 0x71, 0xe5, 0x5b, 0xbd, 0x8f, 0x66, 0x6f, 0x86, 0x4e, 0x82, 0x64, 0x63, 0x95, 0xd6, 0x5e, 0x99, 0x65, 0x17, 0x52, 0xc2, 0x88, 0xc8, 0x70, 0xa3, 0x52, 0x0e, 0x73, 0x33, 0x74, 0x97, 0x67, 0xf7, 0x78, 0x16, 0x97, 0x34, 0x4e, 0xbb, 0x90, 0xde, 0x9c, 0xcb, 0x6d, 0xdb, 0x51, 0x41, 0x8d, 0x1d, 0x54, 0xce, 0x62, 0xb2, 0x73, 0xf1, 0x83, 0xf6, 0x96, 0x84, 0x9f, 0xc3, 0x94, 0x36, 0x4f, 0x9a, 0x7f, 0xcc, 0x51, 0x75, 0x70, 0x75, 0x96, 0xad, 0x5c, 0x86, 0x98, 0xe6, 0x53, 0xe4, 0x4e, 0x9c, 0x6e, 0x09, 0x74, 0xb4, 0x69, 0x6b, 0x78, 0x8f, 0x99, 0x59, 0x75, 0x18, 0x52, 0x24, 0x76, 0x41, 0x6d, 0xf3, 0x67, 0x6d, 0x51, 0x99, 0x9f, 0x4b, 0x80, 0x99, 0x54, 0x3c, 0x7b, 0xbf, 0x7a, 0x86, 0x96, 0x84, 0x57, 0xe2, 0x62, 0x47, 0x96, 0x7c, 0x69, 0x04, 0x5a, 0x02, 0x64, 0xd3, 0x7b, 0x0f, 0x6f, 0x4b, 0x96, 0xa6, 0x82, 0x62, 0x53, 0x85, 0x98, 0x90, 0x5e, 0x89, 0x70, 0xb3, 0x63, 0x64, 0x53, 0x4f, 0x86, 0x81, 0x9c, 0x93, 0x9e, 0x8c, 0x78, 0x32, 0x97, 0xef, 0x8d, 0x42, 0x8d, 0x7f, 0x9e, 0x5e, 0x6f, 0x84, 0x79, 0x55, 0x5f, 0x46, 0x96, 0x2e, 0x62, 0x74, 0x9a, 0x15, 0x54, 0xdd, 0x94, 0xa3, 0x4f, 0xc5, 0x65, 0x65, 0x5c, 0x61, 0x5c, 0x15, 0x7f, 0x51, 0x86, 0x2f, 0x6c, 0x8b, 0x5f, 0x87, 0x73, 0xe4, 0x6e, 0xff, 0x7e, 0xe6, 0x5c, 0x1b, 0x63, 0x6a, 0x5b, 0xe6, 0x6e, 0x75, 0x53, 0x71, 0x4e, 0xa0, 0x63, 0x65, 0x75, 0xa1, 0x62, 0x6e, 0x8f, 0x26, 0x4f, 0xd1, 0x4e, 0xa6, 0x6c, 0xb6, 0x7e, 0xba, 0x8b, 0x1d, 0x84, 0xba, 0x87, 0x57, 0x7f, 0x3b, 0x90, 0x23, 0x95, 0xa9, 0x7b, 0xa1, 0x9a, 0xf8, 0x88, 0x3d, 0x84, 0x1b, 0x6d, 0x86, 0x9a, 0xdc, 0x7e, 0x88, 0x59, 0xbb, 0x9e, 0x9b, 0x73, 0x01, 0x78, 0x82, 0x86, 0x6c, 0x9a, 0x82, 0x9a, 0x1b, 0x56, 0x17, 0x54, 0xcb, 0x57, 0x70, 0x4e, 0xa6, 0x9e, 0x56, 0x53, 0xc8, 0x8f, 0x09, 0x81, 0x92, 0x77, 0x92, 0x99, 0xee, 0x86, 0xe1, 0x6e, 0x13, 0x85, 0xfc, 0x66, 0x62, 0x61, 0x2b, 0x6f, 0x29, 0x8c, 0x92, 0x82, 0x2b, 0x83, 0xf2, 0x76, 0x13, 0x6c, 0xd9, 0x5f, 0xbd, 0x83, 0x2b, 0x73, 0x05, 0x83, 0x1a, 0x95, 0xdb, 0x6b, 0xdb, 0x77, 0xc6, 0x94, 0x6f, 0x53, 0x02, 0x83, 0x92, 0x51, 0x3d, 0x5e, 0x8c, 0x8c, 0x38, 0x8d, 0x48, 0x4e, 0xab, 0x73, 0x9a, 0x67, 0x85, 0x68, 0x76, 0x91, 0x09, 0x97, 0x64, 0x71, 0xa1, 0x6c, 0x09, 0x77, 0x92, 0x5a, 0x41, 0x95, 0xcf, 0x6b, 0x8e, 0x7f, 0x27, 0x66, 0xd0, 0x5b, 0xb9, 0x59, 0x9a, 0x5a, 0xe8, 0x95, 0xf7, 0x95, 0xec, 0x4e, 0x0c, 0x84, 0x99, 0x84, 0xac, 0x6a, 0xdf, 0x76, 0x30, 0x95, 0x1b, 0x73, 0xa6, 0x68, 0x5f, 0x5b, 0x2f, 0x77, 0x9a, 0x91, 0x61, 0x97, 0xdc, 0x7c, 0xf7, 0x8f, 0x1c, 0x8c, 0x25, 0x5f, 0x73, 0x7c, 0xd8, 0x79, 0xc5, 0x89, 0xcc, 0x6c, 0x1c, 0x87, 0xc6, 0x5b, 0x42, 0x5e, 0xc9, 0x68, 0x20, 0x77, 0xf5, 0x7e, 0x95, 0x51, 0x4d, 0x51, 0xc9, 0x52, 0x29, 0x5a, 0x05, 0x7f, 0x62, 0x97, 0xd7, 0x82, 0xcf, 0x63, 0x84, 0x77, 0xd0, 0x85, 0xd2, 0x79, 0x3a, 0x6e, 0x99, 0x5e, 0x99, 0x59, 0x11, 0x85, 0x6d, 0x70, 0x11, 0x6c, 0xbf, 0x62, 0xbf, 0x76, 0x4f, 0x65, 0xaf, 0x60, 0xfd, 0x95, 0x0e, 0x66, 0x9f, 0x87, 0x23, 0x9e, 0xed, 0x94, 0x0d, 0x54, 0x7d, 0x54, 0x2c, 0x8c, 0x78, 0x64, 0x79, 0x64, 0x11, 0x86, 0x21, 0x6a, 0x9c, 0x81, 0xe8, 0x78, 0x69, 0x64, 0x54, 0x9b, 0xb9, 0x62, 0x2b, 0x67, 0xab, 0x83, 0xa8, 0x58, 0xd8, 0x9e, 0xab, 0x6c, 0x20, 0x6f, 0xde, 0x5b, 0x4c, 0x96, 0x0b, 0x8c, 0x5f, 0x72, 0xd0, 0x67, 0xc7, 0x62, 0x61, 0x72, 0xa9, 0x4e, 0xc6, 0x59, 0xcd, 0x6b, 0x93, 0x58, 0xae, 0x66, 0x55, 0x5e, 0xdf, 0x52, 0x55, 0x61, 0x28, 0x67, 0xee, 0x76, 0x66, 0x77, 0x67, 0x72, 0x46, 0x7a, 0xff, 0x62, 0xea, 0x54, 0x50, 0x54, 0xa0, 0x94, 0xa3, 0x90, 0x1c, 0x5a, 0xb3, 0x7e, 0x16, 0x6c, 0x43, 0x4e, 0x76, 0x59, 0x10, 0x80, 0x48, 0x59, 0x57, 0x53, 0x37, 0x75, 0xbe, 0x96, 0xca, 0x56, 0x20, 0x63, 0x11, 0x81, 0x7c, 0x60, 0xf9, 0x95, 0xd6, 0x6d, 0x62, 0x54, 0x81, 0x99, 0x85, 0x51, 0xe9, 0x5a, 0xfd, 0x80, 0xae, 0x59, 0x13, 0x97, 0x2a, 0x50, 0xe5, 0x6c, 0x3c, 0x5c, 0xdf, 0x62, 0x60, 0x4f, 0x3f, 0x53, 0x7b, 0x81, 0x06, 0x90, 0xba, 0x6e, 0x2b, 0x85, 0xc8, 0x62, 0x74, 0x5e, 0xbe, 0x78, 0xb5, 0x64, 0x7b, 0x63, 0xf5, 0x5f, 0x18, 0x5a, 0x7f, 0x91, 0x1f, 0x9e, 0x3f, 0x5c, 0x4f, 0x63, 0x42, 0x80, 0x7d, 0x5b, 0x6e, 0x55, 0x4a, 0x95, 0x4d, 0x95, 0x85, 0x6d, 0xa8, 0x60, 0xe0, 0x67, 0xde, 0x72, 0xdd, 0x51, 0x81, 0x5b, 0xe7, 0x62, 0xde, 0x6c, 0x5b, 0x72, 0x6d, 0x62, 0xae, 0x94, 0xbd, 0x7e, 0x13, 0x81, 0x53, 0x6d, 0x9c, 0x51, 0x04, 0x5f, 0x74, 0x59, 0xaa, 0x52, 0x12, 0x60, 0x73, 0x59, 0x96, 0x66, 0x50, 0x86, 0x9f, 0x75, 0x2a, 0x63, 0xe6, 0x61, 0xef, 0x7c, 0xfa, 0x8b, 0xe6, 0x54, 0x27, 0x6b, 0x25, 0x9e, 0xb4, 0x6b, 0xd5, 0x85, 0x55, 0x54, 0x76, 0x50, 0xa4, 0x6c, 0x6a, 0x55, 0xb4, 0x8d, 0x2c, 0x72, 0x15, 0x5e, 0x15, 0x60, 0x36, 0x74, 0xcd, 0x62, 0x92, 0x63, 0x4c, 0x72, 0x98, 0x5f, 0x43, 0x6e, 0x3e, 0x6d, 0x00, 0x65, 0x58, 0x6f, 0xd8, 0x76, 0xd0, 0x78, 0xfc, 0x76, 0x54, 0x75, 0x24, 0x52, 0xdb, 0x53, 0x53, 0x4e, 0x9e, 0x5e, 0xc1, 0x65, 0x2a, 0x80, 0xd6, 0x80, 0x9b, 0x62, 0x86, 0x54, 0x28, 0x52, 0xae, 0x70, 0x8d, 0x88, 0xd1, 0x8d, 0xe1, 0x6c, 0x78, 0x54, 0xda, 0x80, 0xf9, 0x57, 0xf4, 0x88, 0x54, 0x8d, 0x6a, 0x96, 0x4d, 0x91, 0x69, 0x4f, 0x9b, 0x6c, 0xb7, 0x55, 0xc6, 0x76, 0x30, 0x78, 0xa8, 0x62, 0xf9, 0x70, 0x8e, 0x6f, 0x6d, 0x5f, 0xec, 0x84, 0xda, 0x68, 0x7c, 0x78, 0xf7, 0x7b, 0xa8, 0x81, 0x0b, 0x67, 0x4f, 0x9e, 0x67, 0x63, 0xb0, 0x78, 0x6f, 0x57, 0x12, 0x78, 0x39, 0x97, 0x79, 0x62, 0xab, 0x62, 0x88, 0x52, 0x35, 0x74, 0xd7, 0x6b, 0x64, 0x55, 0x3e, 0x81, 0xb2, 0x75, 0xae, 0x76, 0x39, 0x53, 0xde, 0x75, 0xfb, 0x50, 0x41, 0x5c, 0x6c, 0x8b, 0xc7, 0x7b, 0x4f, 0x50, 0x47, 0x72, 0x97, 0x9a, 0xd8, 0x98, 0x02, 0x6f, 0xe2, 0x74, 0x68, 0x79, 0x87, 0x64, 0xa5, 0x77, 0xfc, 0x62, 0x91, 0x98, 0x2b, 0x8d, 0xc1, 0x54, 0x58, 0x80, 0x52, 0x4e, 0x6a, 0x57, 0xf9, 0x82, 0x0d, 0x84, 0x73, 0x5e, 0xed, 0x51, 0xf6, 0x74, 0xc4, 0x8b, 0x4f, 0x5c, 0x61, 0x57, 0xfc, 0x6c, 0x87, 0x98, 0x46, 0x5a, 0x34, 0x78, 0x44, 0x9b, 0xeb, 0x8f, 0x95, 0x7c, 0x56, 0x52, 0x51, 0x62, 0xfa, 0x94, 0xc6, 0x4e, 0x86, 0x83, 0x61, 0x84, 0xe9, 0x83, 0xb2, 0x84, 0xd4, 0x57, 0x34, 0x67, 0x03, 0x57, 0x6e, 0x66, 0x66, 0x6d, 0x31, 0x8c, 0xdd, 0x66, 0x11, 0x70, 0x1f, 0x67, 0x3a, 0x6b, 0x16, 0x68, 0x1a, 0x62, 0xbb, 0x59, 0x03, 0x4e, 0xc4, 0x51, 0x06, 0x6f, 0xd2, 0x67, 0x8f, 0x6c, 0x76, 0x51, 0xcb, 0x68, 0x47, 0x59, 0x67, 0x6b, 0x66, 0x75, 0x0e, 0x5d, 0x10, 0x81, 0x50, 0x9f, 0xd7, 0x65, 0x48, 0x79, 0x41, 0x79, 0x91, 0x9a, 0x77, 0x8d, 0x82, 0x5c, 0x5e, 0x4e, 0x01, 0x4f, 0x2f, 0x54, 0x51, 0x59, 0x0c, 0x78, 0x68, 0x56, 0x14, 0x6c, 0xc4, 0x8f, 0x03, 0x5f, 0x7d, 0x6c, 0xe3, 0x6c, 0xab, 0x8b, 0x90, 0x63, 0x70, 0x60, 0x3d, 0x6d, 0x75, 0x72, 0x66, 0x62, 0x8e, 0x94, 0xc5, 0x94, 0x43, 0x53, 0xc1, 0x8f, 0x7e, 0x7b, 0xdf, 0x4e, 0x26, 0x8c, 0x7e, 0x4e, 0xd4, 0x9e, 0xb1, 0x94, 0xb3, 0x94, 0x4d, 0x52, 0x5c, 0x6f, 0x63, 0x90, 0x45, 0x6d, 0x34, 0x8c, 0x11, 0x58, 0x4c, 0x5d, 0x20, 0x6b, 0x49, 0x6b, 0xaa, 0x67, 0x5b, 0x54, 0x54, 0x81, 0x8c, 0x7f, 0x99, 0x58, 0x37, 0x85, 0x3a, 0x5f, 0xa2, 0x62, 0x47, 0x6a, 0x39, 0x95, 0x72, 0x65, 0x84, 0x60, 0x65, 0x68, 0xa7, 0x77, 0x54, 0x4e, 0xa8, 0x4f, 0xe7, 0x5d, 0x98, 0x97, 0xac, 0x64, 0xd8, 0x7f, 0xed, 0x5c, 0xcf, 0x4f, 0x8d, 0x7a, 0x07, 0x52, 0x04, 0x83, 0x14, 0x4e, 0x2f, 0x60, 0x83, 0x7a, 0xa6, 0x94, 0xb5, 0x4f, 0xb2, 0x4e, 0xe6, 0x79, 0x34, 0x74, 0xe4, 0x52, 0xb9, 0x82, 0xd2, 0x64, 0xbd, 0x79, 0xdd, 0x5b, 0x81, 0x6c, 0x52, 0x97, 0x7b, 0x8f, 0x22, 0x6c, 0x3e, 0x50, 0x7f, 0x53, 0x05, 0x6e, 0xce, 0x64, 0x74, 0x66, 0x30, 0x6c, 0xc5, 0x60, 0x77, 0x98, 0xf7, 0x8b, 0x86, 0x5e, 0x3c, 0x74, 0x77, 0x7a, 0xcb, 0x79, 0x18, 0x4e, 0xb1, 0x90, 0x03, 0x74, 0x42, 0x6c, 0xda, 0x56, 0x4b, 0x91, 0xc5, 0x6c, 0x8b, 0x8d, 0x3a, 0x53, 0xc6, 0x86, 0xf2, 0x66, 0xaf, 0x8e, 0x48, 0x5c, 0x71, 0x9a, 0x20, 0x6e, 0xd6, 0x53, 0x36, 0x5a, 0x8b, 0x9f, 0xa3, 0x8d, 0xbb, 0x53, 0x08, 0x57, 0xa7, 0x98, 0x43, 0x67, 0x9b, 0x91, 0xc9, 0x6c, 0x68, 0x51, 0xca, 0x75, 0xf3, 0x62, 0xac, 0x72, 0x38, 0x52, 0x9d, 0x52, 0x3a, 0x7f, 0x94, 0x70, 0x38, 0x76, 0x74, 0x53, 0x4a, 0x9e, 0xb7, 0x69, 0x6e, 0x78, 0xc0, 0x96, 0xd9, 0x88, 0xa4, 0x7f, 0x36, 0x71, 0xc3, 0x71, 0x89, 0x51, 0xd3, 0x67, 0xe4, 0x74, 0xe4, 0x58, 0x18, 0x65, 0xb7, 0x56, 0xa9, 0x8b, 0x76, 0x99, 0x70, 0x62, 0xd5, 0x7e, 0xf9, 0x60, 0xed, 0x70, 0xec, 0x58, 0xc1, 0x4e, 0xba, 0x4e, 0xcd, 0x5f, 0xe7, 0x97, 0xfb, 0x4e, 0xa4, 0x8b, 0x03, 0x52, 0x8a, 0x59, 0xab, 0x7e, 0x54, 0x62, 0xcd, 0x4e, 0xe5, 0x65, 0x0e, 0x62, 0x38, 0x83, 0xc9, 0x84, 0x63, 0x83, 0x8d, 0x87, 0x94, 0x71, 0xb6, 0x6e, 0xb9, 0x5b, 0xd2, 0x7e, 0x97, 0x51, 0xc9, 0x63, 0xd4, 0x67, 0x89, 0x80, 0x39, 0x83, 0x15, 0x88, 0x12, 0x51, 0x7a, 0x5b, 0x82, 0x59, 0xb1, 0x8f, 0x73, 0x4e, 0x5d, 0x6c, 0x65, 0x51, 0x25, 0x89, 0x6f, 0x8f, 0x2e, 0x96, 0x4a, 0x85, 0x5e, 0x74, 0x10, 0x95, 0xf0, 0x95, 0xa6, 0x6d, 0xe5, 0x82, 0x31, 0x5f, 0x92, 0x64, 0x12, 0x6d, 0x28, 0x84, 0x6e, 0x81, 0xc3, 0x9c, 0x5e, 0x58, 0x5b, 0x8d, 0x09, 0x4e, 0xc1, 0x53, 0x1e, 0x4f, 0x63, 0x65, 0x51, 0x68, 0xd3, 0x55, 0x27, 0x4e, 0x14, 0x64, 0x9a, 0x9a, 0x6b, 0x62, 0xc2, 0x5a, 0x5f, 0x74, 0x72, 0x82, 0xa9, 0x6d, 0xee, 0x68, 0xe7, 0x50, 0x8e, 0x83, 0x02, 0x78, 0x40, 0x67, 0x39, 0x52, 0x99, 0x6c, 0xb1, 0x7e, 0xbb, 0x50, 0x65, 0x55, 0x5e, 0x71, 0x5b, 0x7b, 0x52, 0x66, 0xca, 0x73, 0xeb, 0x82, 0x49, 0x67, 0x71, 0x5c, 0x20, 0x52, 0x7d, 0x71, 0x6b, 0x88, 0xea, 0x95, 0x55, 0x96, 0xc5, 0x64, 0x61, 0x8d, 0xb3, 0x81, 0x84, 0x55, 0x55, 0x6c, 0x47, 0x62, 0x2e, 0x7f, 0x92, 0x58, 0x24, 0x4f, 0x46, 0x55, 0x4f, 0x8d, 0x4c, 0x66, 0x0a, 0x4e, 0x1a, 0x5c, 0xf3, 0x88, 0xa2, 0x68, 0x4e, 0x63, 0x0d, 0x7a, 0xe7, 0x70, 0x8d, 0x82, 0xfa, 0x52, 0xf6, 0x97, 0x11, 0x5c, 0xe8, 0x54, 0xb5, 0x90, 0xcd, 0x7e, 0x62, 0x59, 0x4a, 0x8d, 0xc7, 0x86, 0x0c, 0x82, 0x0d, 0x82, 0x66, 0x8d, 0x44, 0x64, 0x04, 0x5c, 0x51, 0x61, 0x89, 0x6d, 0x3e, 0x79, 0xbe, 0x8b, 0x37, 0x78, 0x33, 0x75, 0x7b, 0x54, 0x38, 0x4f, 0xab, 0x8e, 0xf1, 0x6d, 0x20, 0x5a, 0xc5, 0x7e, 0x5e, 0x79, 0x88, 0x6c, 0xa1, 0x5b, 0x76, 0x5a, 0x1a, 0x75, 0xbe, 0x80, 0x4e, 0x61, 0x17, 0x6e, 0xf0, 0x58, 0x1f, 0x75, 0x25, 0x75, 0x72, 0x72, 0x47, 0x53, 0xf3, 0x7e, 0x01, 0x77, 0xdb, 0x76, 0x69, 0x52, 0xdc, 0x80, 0x23, 0x57, 0x08, 0x5e, 0x31, 0x59, 0xee, 0x72, 0xbd, 0x65, 0x7f, 0x6e, 0xd7, 0x8b, 0x38, 0x5c, 0x71, 0x86, 0x41, 0x53, 0xf3, 0x77, 0xfe, 0x62, 0xf6, 0x65, 0xc0, 0x4e, 0xdf, 0x98, 0x80, 0x86, 0x9e, 0x5b, 0xc6, 0x8b, 0xf2, 0x53, 0xe2, 0x77, 0x7f, 0x4f, 0x4e, 0x5c, 0x76, 0x9a, 0xcb, 0x59, 0x0f, 0x5f, 0x3a, 0x79, 0xeb, 0x58, 0x16, 0x4e, 0xff, 0x67, 0x8b, 0x4e, 0xed, 0x62, 0x93, 0x8a, 0x1d, 0x90, 0xbf, 0x52, 0x2f, 0x66, 0xdc, 0x55, 0x6c, 0x56, 0x02, 0x90, 0xd5, 0x4e, 0x8d, 0x4f, 0xca, 0x91, 0x70, 0x99, 0x0f, 0x6c, 0x02, 0x5e, 0x43, 0x60, 0xa4, 0x5b, 0xc6, 0x89, 0xd5, 0x8b, 0x36, 0x65, 0x4b, 0x62, 0x96, 0x99, 0x88, 0x5b, 0xff, 0x5b, 0x88, 0x63, 0x2e, 0x55, 0xd7, 0x53, 0x26, 0x76, 0x7d, 0x51, 0x2c, 0x85, 0xa2, 0x67, 0xb3, 0x68, 0x8a, 0x6b, 0x92, 0x62, 0x93, 0x8f, 0xd4, 0x53, 0x12, 0x82, 0xd1, 0x6d, 0x8f, 0x75, 0x66, 0x4e, 0x4e, 0x8d, 0x70, 0x5b, 0x9f, 0x71, 0xaf, 0x85, 0x91, 0x66, 0xd9, 0x66, 0x72, 0x7f, 0x00, 0x87, 0xcd, 0x9e, 0x20, 0x9f, 0x5e, 0x5c, 0x2f, 0x67, 0xf0, 0x8f, 0x11, 0x68, 0x5f, 0x67, 0x0d, 0x62, 0xd6, 0x7a, 0x85, 0x58, 0xb6, 0x5e, 0x70, 0x65, 0x31, 0x6f, 0x55, 0x60, 0x37, 0x52, 0x0d, 0x80, 0x54, 0x64, 0x70, 0x88, 0x29, 0x75, 0x05, 0x5e, 0x13, 0x68, 0xf4, 0x62, 0x1c, 0x97, 0xcc, 0x53, 0x3d, 0x72, 0x01, 0x8c, 0x34, 0x6c, 0x61, 0x77, 0x0e, 0x7a, 0x2e, 0x54, 0xac, 0x77, 0x7a, 0x98, 0x1c, 0x82, 0xf4, 0x8b, 0x55, 0x78, 0x14, 0x67, 0xc1, 0x70, 0xaf, 0x65, 0x95, 0x64, 0x36, 0x56, 0x1d, 0x60, 0xc1, 0x79, 0xf8, 0x53, 0x1d, 0x4e, 0x7b, 0x6b, 0x86, 0x80, 0xfa, 0x5b, 0xe3, 0x55, 0xdb, 0x56, 0x3a, 0x4f, 0x3c, 0x4f, 0x72, 0x99, 0xf3, 0x5d, 0x7e, 0x67, 0x38, 0x80, 0x02, 0x60, 0x82, 0x98, 0x01, 0x90, 0x8b, 0x5b, 0xbc, 0x8b, 0xf5, 0x8b, 0x1c, 0x64, 0x58, 0x82, 0xde, 0x64, 0xfd, 0x55, 0xcf, 0x82, 0x65, 0x91, 0xd7, 0x4f, 0x20, 0x7d, 0x1f, 0x90, 0x9f, 0x7c, 0xf3, 0x50, 0x51, 0x58, 0xaf, 0x6e, 0xbf, 0x5b, 0xc9, 0x8b, 0x83, 0x80, 0x78, 0x91, 0x9c, 0x84, 0x97, 0x7b, 0x7d, 0x86, 0x8b, 0x96, 0x8f, 0x96, 0xe5, 0x7e, 0xd3, 0x9a, 0x8e, 0x78, 0x81, 0x5c, 0x57, 0x7a, 0x42, 0x90, 0xa7, 0x96, 0x5f, 0x79, 0x59, 0x5b, 0x5f, 0x63, 0x0b, 0x7b, 0xd1, 0x84, 0xad, 0x68, 0x06, 0x55, 0x29, 0x7f, 0x10, 0x74, 0x22, 0x7d, 0x01, 0x95, 0x40, 0x62, 0x4c, 0x58, 0xd6, 0x4e, 0x83, 0x5b, 0x79, 0x59, 0x54, 0x58, 0x6d, 0x73, 0x1e, 0x63, 0x4b, 0x8e, 0x0f, 0x8e, 0xce, 0x80, 0xd4, 0x82, 0xac, 0x62, 0xf0, 0x53, 0xf0, 0x6c, 0x5e, 0x91, 0x2a, 0x59, 0x01, 0x60, 0x70, 0x6c, 0x4d, 0x57, 0x4a, 0x64, 0x2a, 0x8d, 0x2b, 0x76, 0xe9, 0x6e, 0x5b, 0x57, 0x80, 0x6a, 0xf0, 0x75, 0x6d, 0x6f, 0x2d, 0x8c, 0x08, 0x8c, 0x66, 0x57, 0xef, 0x6b, 0x92, 0x88, 0xb3, 0x78, 0xa2, 0x63, 0xf9, 0x53, 0xad, 0x70, 0x64, 0x6c, 0x58, 0x58, 0x2a, 0x64, 0x02, 0x58, 0xe0, 0x68, 0x9b, 0x81, 0x10, 0x55, 0xd6, 0x7c, 0x18, 0x50, 0xba, 0x8e, 0xcc, 0x6d, 0x9f, 0x8d, 0xeb, 0x70, 0x8f, 0x63, 0x9b, 0x6d, 0xd4, 0x6e, 0xe6, 0x7e, 0x04, 0x84, 0x43, 0x68, 0x03, 0x90, 0xd8, 0x6d, 0x76, 0x96, 0xa8, 0x8b, 0x57, 0x59, 0x79, 0x72, 0xe4, 0x85, 0x7e, 0x81, 0xbc, 0x75, 0x8a, 0x8a, 0xaf, 0x68, 0x54, 0x52, 0x22, 0x8e, 0x11, 0x95, 0xd0, 0x63, 0x98, 0x98, 0x44, 0x8e, 0x7c, 0x55, 0x53, 0x4f, 0xff, 0x66, 0x8f, 0x56, 0xd5, 0x60, 0x95, 0x6d, 0x43, 0x52, 0x49, 0x5c, 0x29, 0x59, 0xfb, 0x6d, 0x6b, 0x58, 0x30, 0x75, 0x1c, 0x75, 0x6c, 0x60, 0x14, 0x82, 0x46, 0x81, 0x11, 0x63, 0x61, 0x67, 0xe2, 0x8f, 0x3a, 0x77, 0xf3, 0x8d, 0x34, 0x8d, 0xc1, 0x94, 0x16, 0x5e, 0x85, 0x53, 0x2c, 0x54, 0xc3, 0x70, 0x40, 0x6c, 0xf7, 0x5e, 0x5c, 0x50, 0xad, 0x4e, 0xad, 0x5e, 0x3a, 0x63, 0x47, 0x82, 0x1a, 0x90, 0x50, 0x68, 0x6e, 0x91, 0xb3, 0x77, 0x0c, 0x54, 0xdc, 0x94, 0x64, 0x5f, 0xe5, 0x7a, 0x76, 0x68, 0x45, 0x63, 0x52, 0x7b, 0xdf, 0x7e, 0xdb, 0x75, 0x77, 0x50, 0x95, 0x62, 0x34, 0x59, 0x0f, 0x90, 0xf8, 0x51, 0xc3, 0x79, 0x81, 0x7a, 0xfe, 0x56, 0x92, 0x5f, 0x14, 0x90, 0x82, 0x6d, 0x60, 0x5c, 0x1f, 0x57, 0x10, 0x54, 0x54, 0x51, 0x4d, 0x6e, 0xe2, 0x56, 0xa8, 0x63, 0x93, 0x98, 0x7f, 0x81, 0x15, 0x87, 0x2a, 0x89, 0x00, 0x90, 0x1e, 0x54, 0x6f, 0x5c, 0xc0, 0x81, 0xd6, 0x62, 0x58, 0x62, 0x31, 0x81, 0x35, 0x9e, 0x40, 0x96, 0x6e, 0x9a, 0x7c, 0x9a, 0x2d, 0x69, 0xa5, 0x59, 0xd3, 0x62, 0x3e, 0x55, 0x16, 0x63, 0xc7, 0x54, 0xd9, 0x86, 0x3c, 0x6d, 0x03, 0x5a, 0xe6, 0x74, 0x9c, 0x88, 0x6a, 0x6b, 0x16, 0x59, 0x4c, 0x8c, 0x2f, 0x5f, 0x7e, 0x6e, 0xa9, 0x73, 0x7d, 0x98, 0x38, 0x4e, 0xf7, 0x70, 0x8c, 0x5b, 0x97, 0x78, 0x3d, 0x63, 0x5a, 0x66, 0x96, 0x76, 0xcb, 0x60, 0x9b, 0x5b, 0x49, 0x5a, 0x07, 0x4e, 0x55, 0x81, 0x6a, 0x6c, 0x8b, 0x73, 0xa1, 0x4e, 0x89, 0x67, 0x51, 0x7f, 0x80, 0x5f, 0xfa, 0x65, 0x1b, 0x67, 0xd8, 0x5f, 0x84, 0x59, 0x01, 0x5a, 0xcd, 0x5d, 0xae, 0x5f, 0x71, 0x53, 0xe6, 0x97, 0xdd, 0x8f, 0x45, 0x68, 0xf4, 0x56, 0x2f, 0x55, 0xdf, 0x60, 0x3a, 0x4e, 0x4d, 0x6f, 0xf4, 0x7e, 0xc7, 0x82, 0x0e, 0x84, 0xd4, 0x59, 0x1f, 0x4f, 0x2a, 0x4f, 0x3e, 0x5c, 0xac, 0x7e, 0x2a, 0x67, 0x1a, 0x85, 0x73, 0x54, 0x4f, 0x75, 0xc3, 0x80, 0x82, 0x55, 0x4f, 0x9b, 0x4d, 0x4f, 0x2d, 0x6e, 0x13, 0x8c, 0x09, 0x5c, 0x70, 0x61, 0x6b, 0x53, 0x1f, 0x76, 0x29, 0x6e, 0x8a, 0x86, 0x87, 0x65, 0xfb, 0x95, 0xb9, 0x7e, 0x3b, 0x54, 0x33, 0x7a, 0x0a, 0x7d, 0xee, 0x95, 0xe1, 0x55, 0xc1, 0x7f, 0xee, 0x74, 0x1d, 0x63, 0x17, 0x87, 0xa1, 0x6d, 0x9d, 0x7a, 0x11, 0x62, 0xa1, 0x65, 0x67, 0x53, 0xe1, 0x63, 0x83, 0x6c, 0xeb, 0x5d, 0x5c, 0x54, 0xa8, 0x94, 0x4c, 0x4e, 0x61, 0x6c, 0xec, 0x8b, 0x4b, 0x5c, 0xe0, 0x65, 0x9c, 0x82, 0xa7, 0x68, 0x3e, 0x54, 0x34, 0x54, 0xcb, 0x6b, 0x66, 0x6b, 0x94, 0x4e, 0x42, 0x63, 0x48, 0x53, 0x1e, 0x82, 0x0d, 0x4f, 0xae, 0x4f, 0x5e, 0x57, 0x0a, 0x62, 0xfe, 0x96, 0x64, 0x66, 0x69, 0x72, 0xff, 0x52, 0xa1, 0x52, 0x9f, 0x60, 0xef, 0x8b, 0x14, 0x66, 0x99, 0x71, 0x90, 0x67, 0x7f, 0x89, 0x52, 0x78, 0xfd, 0x77, 0x70, 0x66, 0x3b, 0x56, 0x38, 0x54, 0x21, 0x95, 0x7a, 0x72, 0x00, 0x7a, 0x6f, 0x60, 0x0c, 0x5e, 0x89, 0x60, 0x9d, 0x81, 0x15, 0x59, 0xdc, 0x60, 0x84, 0x71, 0xef, 0x70, 0xaa, 0x6e, 0x50, 0x6c, 0x80, 0x72, 0x84, 0x6a, 0xad, 0x88, 0x2d, 0x5e, 0x60, 0x4e, 0xb3, 0x5a, 0x9c, 0x55, 0xe3, 0x94, 0x17, 0x6d, 0xfb, 0x7c, 0x99, 0x96, 0x0f, 0x62, 0xc6, 0x7e, 0x8e, 0x77, 0x7e, 0x86, 0x23, 0x53, 0x1e, 0x97, 0x96, 0x8f, 0x87, 0x66, 0xe1, 0x5c, 0xa0, 0x4f, 0xed, 0x72, 0x0b, 0x4e, 0xa6, 0x53, 0x0f, 0x59, 0x13, 0x54, 0x80, 0x63, 0x28, 0x95, 0x48, 0x51, 0xd9, 0x4e, 0x9c, 0x9c, 0xa4, 0x7e, 0xb8, 0x54, 0x24, 0x8d, 0x54, 0x88, 0x37, 0x82, 0xf2, 0x95, 0x8e, 0x6d, 0x26, 0x5f, 0xcc, 0x5a, 0x3e, 0x66, 0x69, 0x96, 0xb0, 0x73, 0x2e, 0x73, 0xbf, 0x53, 0x7a, 0x81, 0x85, 0x99, 0xa1, 0x7f, 0xaa, 0x5b, 0x77, 0x96, 0x50, 0x96, 0xbf, 0x7e, 0xf8, 0x76, 0xa2, 0x53, 0x76, 0x95, 0x99, 0x99, 0xb1, 0x7b, 0x44, 0x89, 0x58, 0x6e, 0x61, 0x4e, 0xd4, 0x7f, 0x65, 0x79, 0xe6, 0x8b, 0xf3, 0x60, 0xcd, 0x54, 0xab, 0x4e, 0x79, 0x98, 0xf7, 0x5d, 0x61, 0x6a, 0xcf, 0x50, 0x11, 0x54, 0x61, 0x8c, 0x27, 0x84, 0x5d, 0x78, 0x04, 0x97, 0x4a, 0x52, 0xee, 0x54, 0xa3, 0x56, 0x00, 0x95, 0x88, 0x6d, 0xb5, 0x5b, 0xc6, 0x6d, 0x53, 0x66, 0x0f, 0x5c, 0x5d, 0x5b, 0x21, 0x68, 0x96, 0x80, 0x78, 0x55, 0x11, 0x7b, 0x48, 0x65, 0x54, 0x69, 0x9b, 0x4e, 0x47, 0x6b, 0x4e, 0x87, 0x8b, 0x97, 0x4f, 0x53, 0x1f, 0x63, 0x3a, 0x64, 0xaa, 0x90, 0x9c, 0x65, 0xc1, 0x80, 0x10, 0x8c, 0x99, 0x51, 0xb0, 0x68, 0x78, 0x53, 0xf9, 0x87, 0xc8, 0x61, 0xc4, 0x6c, 0xfb, 0x6c, 0x22, 0x8c, 0x51, 0x5c, 0xaa, 0x85, 0xaf, 0x82, 0x0c, 0x95, 0x23, 0x6b, 0x9b, 0x8f, 0xb0, 0x65, 0xfb, 0x5f, 0xc3, 0x5f, 0xe1, 0x4f, 0x45, 0x88, 0x1f, 0x66, 0x65, 0x81, 0x29, 0x73, 0xfa, 0x60, 0x74, 0x51, 0x11, 0x52, 0x8b, 0x57, 0x62, 0x5f, 0xa2, 0x90, 0x4c, 0x88, 0x92, 0x91, 0x78, 0x5e, 0x4f, 0x67, 0x27, 0x60, 0xd3, 0x59, 0x44, 0x51, 0xf6, 0x51, 0xf8, 0x80, 0x08, 0x53, 0x79, 0x6c, 0xc4, 0x96, 0x8a, 0x71, 0x11, 0x4f, 0xee, 0x4f, 0x9e, 0x7f, 0x3d, 0x67, 0xc5, 0x55, 0x08, 0x95, 0xc0, 0x79, 0x96, 0x88, 0xe3, 0x7e, 0x9f, 0x58, 0x0c, 0x62, 0x00, 0x97, 0x5a, 0x86, 0x18, 0x56, 0x7b, 0x98, 0x90, 0x5f, 0xb8, 0x8b, 0xc4, 0x84, 0x57, 0x91, 0xd9, 0x53, 0xed, 0x65, 0x8f, 0x5e, 0x5c, 0x75, 0x64, 0x60, 0x6e, 0x7d, 0x7f, 0x5a, 0xea, 0x7e, 0xed, 0x7e, 0x69, 0x8f, 0xa7, 0x55, 0xa3, 0x5b, 0xac, 0x60, 0xcb, 0x65, 0x84, 0x73, 0x09, 0x90, 0x63, 0x76, 0x29, 0x77, 0xda, 0x7e, 0x74, 0x97, 0x9b, 0x85, 0x66, 0x5b, 0x74, 0x7a, 0xea, 0x96, 0x40, 0x88, 0xcb, 0x52, 0x8f, 0x71, 0xaa, 0x5f, 0xec, 0x65, 0xe2, 0x8b, 0xfb, 0x5b, 0x6f, 0x9a, 0xe1, 0x5d, 0x89, 0x6b, 0x5b, 0x6c, 0xad, 0x8b, 0xaf, 0x8b, 0x0a, 0x90, 0xc5, 0x8f, 0x8b, 0x53, 0xbc, 0x62, 0x26, 0x9e, 0x2d, 0x9e, 0x40, 0x54, 0x2b, 0x4e, 0xbd, 0x82, 0x59, 0x72, 0x9c, 0x86, 0x16, 0x5d, 0x59, 0x88, 0xaf, 0x6d, 0xc5, 0x96, 0xd1, 0x54, 0x9a, 0x4e, 0xb6, 0x8b, 0x09, 0x71, 0xbd, 0x54, 0x09, 0x96, 0xdf, 0x70, 0xf9, 0x6d, 0xd0, 0x76, 0x25, 0x4e, 0x14, 0x78, 0x12, 0x87, 0xa9, 0x5c, 0xf6, 0x5e, 0x00, 0x8a, 0x9c, 0x98, 0x0e, 0x96, 0x8e, 0x70, 0xbf, 0x6c, 0x44, 0x59, 0xa9, 0x63, 0x3c, 0x77, 0x4d, 0x88, 0x14, 0x6f, 0x73, 0x82, 0x30, 0x58, 0xd5, 0x71, 0x8c, 0x53, 0x1a, 0x78, 0xc1, 0x96, 0x01, 0x55, 0x66, 0x5f, 0x30, 0x71, 0xb4, 0x5b, 0x1a, 0x8c, 0x8c, 0x9a, 0x83, 0x6b, 0x2e, 0x59, 0x2f, 0x9e, 0xe7, 0x79, 0x68, 0x67, 0x6c, 0x62, 0x6f, 0x4f, 0xa1, 0x75, 0x8a, 0x7f, 0x0b, 0x6d, 0x33, 0x96, 0x27, 0x6c, 0xf0, 0x4e, 0xd2, 0x75, 0x7b, 0x51, 0x37, 0x68, 0x3e, 0x6f, 0x80, 0x90, 0x70, 0x81, 0x96, 0x59, 0x76, 0x74, 0x47, 0x64, 0x27, 0x5c, 0x65, 0x90, 0x91, 0x7a, 0x23, 0x8c, 0xda, 0x59, 0xac, 0x54, 0x00, 0x82, 0x6f, 0x83, 0x81, 0x89, 0x00, 0x80, 0x30, 0x69, 0x4e, 0x56, 0x36, 0x80, 0x37, 0x72, 0xce, 0x91, 0xb6, 0x51, 0x5f, 0x4e, 0x75, 0x98, 0x96, 0x63, 0x1a, 0x4e, 0xf6, 0x53, 0xf3, 0x66, 0x4b, 0x81, 0x1c, 0x59, 0xb2, 0x6d, 0x00, 0x4e, 0xf9, 0x58, 0x3b, 0x53, 0xd6, 0x63, 0xf1, 0x94, 0x9d, 0x4f, 0x0a, 0x4f, 0x63, 0x88, 0x90, 0x98, 0x37, 0x59, 0x57, 0x90, 0xfb, 0x79, 0xea, 0x4e, 0xf0, 0x80, 0x91, 0x75, 0x82, 0x6c, 0x9c, 0x5b, 0xe8, 0x59, 0x5d, 0x5f, 0x05, 0x69, 0x81, 0x86, 0x1a, 0x50, 0xf2, 0x5d, 0x59, 0x4e, 0xe3, 0x77, 0xe5, 0x4e, 0x7a, 0x82, 0x91, 0x62, 0x13, 0x66, 0x91, 0x90, 0x79, 0x5c, 0xbf, 0x4e, 0x79, 0x5f, 0xc6, 0x81, 0x38, 0x90, 0x84, 0x80, 0xab, 0x75, 0xa6, 0x4e, 0xd4, 0x88, 0x0f, 0x61, 0xc5, 0x6b, 0xc6, 0x5f, 0x49, 0x4e, 0xca, 0x76, 0xa2, 0x6e, 0xe3, 0x8b, 0xae, 0x8b, 0x0a, 0x8c, 0xd1, 0x8b, 0x02, 0x5f, 0xfc, 0x7f, 0xcc, 0x7f, 0xce, 0x7e, 0x35, 0x83, 0x6b, 0x83, 0xe0, 0x56, 0xb7, 0x6b, 0xf3, 0x97, 0x34, 0x96, 0xfb, 0x59, 0x1f, 0x54, 0xf6, 0x94, 0xeb, 0x6d, 0xc5, 0x5b, 0x6e, 0x99, 0x39, 0x5c, 0x15, 0x5f, 0x90, 0x96, 0x70, 0x53, 0xf1, 0x82, 0x31, 0x6a, 0x74, 0x5a, 0x70, 0x9e, 0x94, 0x5e, 0x28, 0x7f, 0xb9, 0x83, 0x24, 0x84, 0x25, 0x84, 0x67, 0x83, 0x47, 0x87, 0xce, 0x8f, 0x62, 0x8d, 0xc8, 0x76, 0x71, 0x5f, 0x96, 0x98, 0x6c, 0x78, 0x20, 0x66, 0xdf, 0x54, 0xe5, 0x62, 0x63, 0x4f, 0xc3, 0x81, 0xc8, 0x75, 0xb8, 0x5e, 0xcd, 0x96, 0x0a, 0x8e, 0xf9, 0x86, 0x8f, 0x54, 0xf3, 0x6c, 0x8c, 0x6d, 0x38, 0x6c, 0x7f, 0x60, 0xc7, 0x52, 0x28, 0x75, 0x7d, 0x5e, 0x18, 0x4f, 0xa0, 0x60, 0xe7, 0x5f, 0x24, 0x5c, 0x31, 0x75, 0xae, 0x90, 0xc0, 0x94, 0xb9, 0x72, 0xb9, 0x6c, 0x38, 0x6e, 0x49, 0x91, 0x09, 0x67, 0xcb, 0x53, 0xf3, 0x53, 0x51, 0x4f, 0xc9, 0x91, 0xf1, 0x8b, 0xc8, 0x53, 0x7c, 0x5e, 0xc2, 0x8f, 0xe4, 0x6d, 0x8e, 0x4e, 0xc2, 0x76, 0x86, 0x69, 0x5e, 0x86, 0x1a, 0x61, 0x06, 0x82, 0x59, 0x4f, 0xde, 0x4f, 0x3e, 0x90, 0x7c, 0x9c, 0x09, 0x61, 0x1d, 0x6e, 0x14, 0x6e, 0x85, 0x96, 0x88, 0x4e, 0x31, 0x5a, 0xe8, 0x96, 0x0e, 0x4e, 0x7f, 0x5c, 0xb9, 0x79, 0x87, 0x5b, 0xed, 0x8b, 0xbd, 0x7f, 0x89, 0x73, 0xdf, 0x57, 0x8b, 0x82, 0xc1, 0x90, 0x01, 0x54, 0x47, 0x90, 0xbb, 0x55, 0xea, 0x5c, 0xa1, 0x5f, 0x08, 0x61, 0x32, 0x6b, 0xf1, 0x72, 0xb2, 0x80, 0x89, 0x8a, 0x74, 0x6d, 0xd3, 0x5b, 0xd5, 0x88, 0x84, 0x98, 0x6b, 0x8c, 0x6d, 0x9a, 0x33, 0x9e, 0x0a, 0x6e, 0xa4, 0x51, 0x43, 0x51, 0xa3, 0x57, 0x81, 0x88, 0x9f, 0x53, 0xf4, 0x63, 0x95, 0x8f, 0xed, 0x56, 0x58, 0x54, 0x06, 0x57, 0x3f, 0x73, 0x90, 0x6e, 0x18, 0x7f, 0xdc, 0x8f, 0xd1, 0x82, 0x3f, 0x61, 0x28, 0x60, 0x62, 0x96, 0xf0, 0x66, 0xa6, 0x7e, 0x8a, 0x8d, 0xc3, 0x8d, 0xa5, 0x94, 0xb3, 0x5c, 0xa4, 0x7c, 0x08, 0x67, 0xa6, 0x60, 0x05, 0x96, 0x18, 0x80, 0x91, 0x4e, 0xe7, 0x90, 0x00, 0x53, 0x68, 0x96, 0x41, 0x51, 0xd0, 0x8f, 0x74, 0x85, 0x5d, 0x91, 0x55, 0x66, 0xf5, 0x97, 0x55, 0x5b, 0x1d, 0x53, 0x38, 0x78, 0x42, 0x67, 0x3d, 0x68, 0xc9, 0x54, 0x7e, 0x70, 0xb0, 0x5b, 0x7d, 0x8f, 0x8d, 0x51, 0x28, 0x57, 0xb1, 0x54, 0x12, 0x65, 0x82, 0x66, 0x5e, 0x8d, 0x43, 0x8d, 0x0f, 0x81, 0x6c, 0x84, 0x6d, 0x90, 0xdf, 0x7c, 0xff, 0x51, 0xfb, 0x85, 0xa3, 0x67, 0xe9, 0x65, 0xa1, 0x6f, 0xa4, 0x86, 0x81, 0x8e, 0x6a, 0x56, 0x20, 0x90, 0x82, 0x76, 0x76, 0x70, 0xe5, 0x71, 0x23, 0x8d, 0xe9, 0x62, 0x19, 0x52, 0xfd, 0x6c, 0x3c, 0x8d, 0x0e, 0x60, 0x9e, 0x58, 0x8e, 0x61, 0xfe, 0x66, 0x60, 0x8d, 0x4e, 0x62, 0xb3, 0x55, 0x23, 0x6e, 0x2d, 0x67, 0x67, 0x8f, 0xe1, 0x94, 0xf8, 0x95, 0x28, 0x77, 0x05, 0x68, 0xa8, 0x69, 0x8b, 0x54, 0x4d, 0x4e, 0xb8, 0x70, 0xc8, 0x8b, 0x58, 0x64, 0x8b, 0x65, 0x85, 0x5b, 0x84, 0x7a, 0x3a, 0x50, 0xe8, 0x5b, 0xbb, 0x77, 0xe1, 0x6b, 0x79, 0x8a, 0x98, 0x7c, 0xbe, 0x6c, 0xcf, 0x76, 0xa9, 0x65, 0x97, 0x8f, 0x2d, 0x5d, 0x55, 0x5c, 0x38, 0x86, 0x08, 0x68, 0x60, 0x53, 0x18, 0x62, 0xd9, 0x7a, 0x5b, 0x6e, 0xfd, 0x7e, 0x1f, 0x6a, 0xe0, 0x7a, 0x70, 0x5f, 0x33, 0x6f, 0x20, 0x5f, 0x8c, 0x63, 0xa8, 0x6d, 0x56, 0x67, 0x08, 0x4e, 0x10, 0x5e, 0x26, 0x8d, 0xd7, 0x4e, 0xc0, 0x80, 0x34, 0x76, 0x9c, 0x96, 0xdb, 0x62, 0x2d, 0x66, 0x7e, 0x62, 0xbc, 0x6c, 0x75, 0x8d, 0x67, 0x71, 0x69, 0x7f, 0x46, 0x51, 0x87, 0x80, 0xec, 0x53, 0x6e, 0x90, 0x98, 0x62, 0xf2, 0x54, 0xf0, 0x86, 0x99, 0x8f, 0x05, 0x80, 0x17, 0x95, 0x17, 0x85, 0xd9, 0x8f, 0x59, 0x6d, 0xcd, 0x73, 0x9f, 0x65, 0x1f, 0x77, 0x04, 0x75, 0x27, 0x78, 0xfb, 0x81, 0x1e, 0x8d, 0x88, 0x94, 0xa6, 0x4f, 0x95, 0x67, 0xb9, 0x75, 0xca, 0x8b, 0x07, 0x97, 0x2f, 0x63, 0x47, 0x95, 0x35, 0x96, 0xb8, 0x84, 0x23, 0x63, 0x41, 0x77, 0x81, 0x5f, 0xf0, 0x72, 0x89, 0x4e, 0x14, 0x60, 0x74, 0x65, 0xef, 0x62, 0x63, 0x6b, 0x3f, 0x65, 0x27, 0x5e, 0xc7, 0x75, 0xd1, 0x90, 0xc1, 0x8b, 0x9d, 0x82, 0x9d, 0x67, 0x2f, 0x65, 0x31, 0x54, 0x18, 0x87, 0xe5, 0x77, 0xa2, 0x80, 0x02, 0x81, 0x41, 0x6c, 0x4b, 0x4e, 0xc7, 0x7e, 0x4c, 0x80, 0xf4, 0x76, 0x0d, 0x69, 0x96, 0x6b, 0x67, 0x62, 0x3c, 0x50, 0x84, 0x4f, 0x40, 0x57, 0x07, 0x63, 0x62, 0x6b, 0xbe, 0x8d, 0xea, 0x53, 0xe8, 0x65, 0xb8, 0x7e, 0xd7, 0x5f, 0x1a, 0x63, 0xb7, 0x63, 0xf3, 0x81, 0xf4, 0x81, 0x6e, 0x7f, 0x1c, 0x5e, 0xd9, 0x5c, 0x36, 0x52, 0x7a, 0x66, 0xe9, 0x79, 0x1a, 0x7a, 0x28, 0x8d, 0x99, 0x70, 0xd4, 0x75, 0xde, 0x6e, 0xbb, 0x6c, 0x92, 0x7a, 0x2d, 0x4e, 0xc5, 0x76, 0xe0, 0x5f, 0x9f, 0x94, 0x77, 0x88, 0xc8, 0x7e, 0xcd, 0x79, 0xbf, 0x80, 0xcd, 0x91, 0xf2, 0x4e, 0x17, 0x4f, 0x1f, 0x82, 0x68, 0x54, 0xde, 0x5d, 0x32, 0x6d, 0xcc, 0x8b, 0xa5, 0x7c, 0x74, 0x8f, 0x98, 0x80, 0x1a, 0x5e, 0x92, 0x54, 0xb1, 0x76, 0x99, 0x5b, 0x3c, 0x66, 0xa4, 0x9a, 0xe0, 0x73, 0x2a, 0x68, 0xdb, 0x86, 0x31, 0x67, 0x2a, 0x73, 0xf8, 0x8b, 0xdb, 0x8b, 0x10, 0x90, 0xf9, 0x7a, 0xdb, 0x70, 0x6e, 0x71, 0xc4, 0x62, 0xa9, 0x77, 0x31, 0x56, 0x3b, 0x4e, 0x57, 0x84, 0xf1, 0x67, 0xa9, 0x52, 0xc0, 0x86, 0x2e, 0x8d, 0xf8, 0x94, 0x51, 0x7b, 0x4f, 0x4f, 0xe8, 0x6c, 0x5d, 0x79, 0x7b, 0x9a, 0x93, 0x62, 0x2a, 0x72, 0xfd, 0x62, 0x13, 0x4e, 0x16, 0x78, 0x6c, 0x8f, 0xb0, 0x64, 0x5a, 0x8d, 0xc6, 0x7b, 0x69, 0x68, 0x84, 0x5e, 0xc5, 0x88, 0x86, 0x59, 0x9e, 0x64, 0xee, 0x58, 0xb6, 0x72, 0x0e, 0x69, 0x25, 0x95, 0xfd, 0x8f, 0x58, 0x8d, 0x60, 0x57, 0x00, 0x7f, 0x06, 0x8c, 0xc6, 0x51, 0x49, 0x63, 0xd9, 0x62, 0x53, 0x53, 0x4c, 0x68, 0x22, 0x74, 0x01, 0x83, 0x4c, 0x91, 0x44, 0x55, 0x40, 0x77, 0x7c, 0x70, 0x4a, 0x6d, 0x79, 0x51, 0xa8, 0x54, 0x44, 0x8d, 0xff, 0x59, 0xcb, 0x6e, 0xc4, 0x6d, 0x5c, 0x5b, 0x2b, 0x7d, 0xd4, 0x4e, 0x7d, 0x7c, 0xd3, 0x6e, 0x50, 0x5b, 0xea, 0x81, 0x0d, 0x6e, 0x57, 0x5b, 0x03, 0x9b, 0xd5, 0x68, 0x2a, 0x8e, 0x97, 0x5b, 0xfc, 0x7e, 0x3b, 0x60, 0xb5, 0x7e, 0xb9, 0x90, 0x70, 0x8d, 0x4f, 0x59, 0xcd, 0x63, 0xdf, 0x79, 0xb3, 0x8d, 0x52, 0x53, 0xcf, 0x65, 0x56, 0x79, 0xc5, 0x8b, 0x3b, 0x96, 0xc4, 0x7e, 0xbb, 0x94, 0x82, 0x7e, 0x34, 0x56, 0x89, 0x91, 0x00, 0x67, 0x6a, 0x7f, 0x0a, 0x5c, 0x75, 0x90, 0x28, 0x66, 0xe6, 0x5d, 0x50, 0x4f, 0xde, 0x67, 0x5a, 0x50, 0x5c, 0x4f, 0x50, 0x57, 0xa7, 0x5e, 0x10, 0xe8, 0x11, 0xe8, 0x12, 0xe8, 0x13, 0xe8, 0x14, 0xe8, 0x8d, 0x4e, 0x0c, 0x4e, 0x40, 0x51, 0x10, 0x4e, 0xff, 0x5e, 0x45, 0x53, 0x15, 0x4e, 0x98, 0x4e, 0x1e, 0x4e, 0x32, 0x9b, 0x6c, 0x5b, 0x69, 0x56, 0x28, 0x4e, 0xba, 0x79, 0x3f, 0x4e, 0x15, 0x53, 0x47, 0x4e, 0x2d, 0x59, 0x3b, 0x72, 0x6e, 0x53, 0x10, 0x6c, 0xdf, 0x56, 0xe4, 0x80, 0x97, 0x99, 0xd3, 0x6b, 0x7e, 0x77, 0x17, 0x9f, 0x36, 0x4e, 0x9f, 0x4e, 0x10, 0x9f, 0x5c, 0x4e, 0x69, 0x4e, 0x93, 0x4e, 0x88, 0x82, 0x5b, 0x5b, 0x6c, 0x55, 0x0f, 0x56, 0xc4, 0x4e, 0x8d, 0x53, 0x9d, 0x53, 0xa3, 0x53, 0xa5, 0x53, 0xae, 0x53, 0x65, 0x97, 0x5d, 0x8d, 0x1a, 0x53, 0xf5, 0x53, 0x26, 0x53, 0x2e, 0x53, 0x3e, 0x53, 0x5c, 0x8d, 0x66, 0x53, 0x63, 0x53, 0x02, 0x52, 0x08, 0x52, 0x0e, 0x52, 0x2d, 0x52, 0x33, 0x52, 0x3f, 0x52, 0x40, 0x52, 0x4c, 0x52, 0x5e, 0x52, 0x61, 0x52, 0x5c, 0x52, 0xaf, 0x84, 0x7d, 0x52, 0x82, 0x52, 0x81, 0x52, 0x90, 0x52, 0x93, 0x52, 0x82, 0x51, 0x54, 0x7f, 0xbb, 0x4e, 0xc3, 0x4e, 0xc9, 0x4e, 0xc2, 0x4e, 0xe8, 0x4e, 0xe1, 0x4e, 0xeb, 0x4e, 0xde, 0x4e, 0x1b, 0x4f, 0xf3, 0x4e, 0x22, 0x4f, 0x64, 0x4f, 0xf5, 0x4e, 0x25, 0x4f, 0x27, 0x4f, 0x09, 0x4f, 0x2b, 0x4f, 0x5e, 0x4f, 0x67, 0x4f, 0x38, 0x65, 0x5a, 0x4f, 0x5d, 0x4f, 0x5f, 0x4f, 0x57, 0x4f, 0x32, 0x4f, 0x3d, 0x4f, 0x76, 0x4f, 0x74, 0x4f, 0x91, 0x4f, 0x89, 0x4f, 0x83, 0x4f, 0x8f, 0x4f, 0x7e, 0x4f, 0x7b, 0x4f, 0xaa, 0x4f, 0x7c, 0x4f, 0xac, 0x4f, 0x94, 0x4f, 0xe6, 0x4f, 0xe8, 0x4f, 0xea, 0x4f, 0xc5, 0x4f, 0xda, 0x4f, 0xe3, 0x4f, 0xdc, 0x4f, 0xd1, 0x4f, 0xdf, 0x4f, 0xf8, 0x4f, 0x29, 0x50, 0x4c, 0x50, 0xf3, 0x4f, 0x2c, 0x50, 0x0f, 0x50, 0x2e, 0x50, 0x2d, 0x50, 0xfe, 0x4f, 0x1c, 0x50, 0x0c, 0x50, 0x25, 0x50, 0x28, 0x50, 0x7e, 0x50, 0x43, 0x50, 0x55, 0x50, 0x48, 0x50, 0x4e, 0x50, 0x6c, 0x50, 0x7b, 0x50, 0xa5, 0x50, 0xa7, 0x50, 0xa9, 0x50, 0xba, 0x50, 0xd6, 0x50, 0x06, 0x51, 0xed, 0x50, 0xec, 0x50, 0xe6, 0x50, 0xee, 0x50, 0x07, 0x51, 0x0b, 0x51, 0xdd, 0x4e, 0x3d, 0x6c, 0x58, 0x4f, 0x65, 0x4f, 0xce, 0x4f, 0xa0, 0x9f, 0x46, 0x6c, 0x74, 0x7c, 0x6e, 0x51, 0xfd, 0x5d, 0xc9, 0x9e, 0x98, 0x99, 0x81, 0x51, 0x14, 0x59, 0xf9, 0x52, 0x0d, 0x53, 0x07, 0x8a, 0x10, 0x53, 0xeb, 0x51, 0x19, 0x59, 0x55, 0x51, 0xa0, 0x4e, 0x56, 0x51, 0xb3, 0x4e, 0x6e, 0x88, 0xa4, 0x88, 0xb5, 0x4e, 0x14, 0x81, 0xd2, 0x88, 0x80, 0x79, 0x34, 0x5b, 0x03, 0x88, 0xb8, 0x7f, 0xab, 0x51, 0xb1, 0x51, 0xbd, 0x51, 0xbc, 0x51, 0xc7, 0x51, 0x96, 0x51, 0xa2, 0x51, 0xa5, 0x51, 0xa0, 0x8b, 0xa6, 0x8b, 0xa7, 0x8b, 0xaa, 0x8b, 0xb4, 0x8b, 0xb5, 0x8b, 0xb7, 0x8b, 0xc2, 0x8b, 0xc3, 0x8b, 0xcb, 0x8b, 0xcf, 0x8b, 0xce, 0x8b, 0xd2, 0x8b, 0xd3, 0x8b, 0xd4, 0x8b, 0xd6, 0x8b, 0xd8, 0x8b, 0xd9, 0x8b, 0xdc, 0x8b, 0xdf, 0x8b, 0xe0, 0x8b, 0xe4, 0x8b, 0xe8, 0x8b, 0xe9, 0x8b, 0xee, 0x8b, 0xf0, 0x8b, 0xf3, 0x8b, 0xf6, 0x8b, 0xf9, 0x8b, 0xfc, 0x8b, 0xff, 0x8b, 0x00, 0x8c, 0x02, 0x8c, 0x04, 0x8c, 0x07, 0x8c, 0x0c, 0x8c, 0x0f, 0x8c, 0x11, 0x8c, 0x12, 0x8c, 0x14, 0x8c, 0x15, 0x8c, 0x16, 0x8c, 0x19, 0x8c, 0x1b, 0x8c, 0x18, 0x8c, 0x1d, 0x8c, 0x1f, 0x8c, 0x20, 0x8c, 0x21, 0x8c, 0x25, 0x8c, 0x27, 0x8c, 0x2a, 0x8c, 0x2b, 0x8c, 0x2e, 0x8c, 0x2f, 0x8c, 0x32, 0x8c, 0x33, 0x8c, 0x35, 0x8c, 0x36, 0x8c, 0x69, 0x53, 0x7a, 0x53, 0x1d, 0x96, 0x22, 0x96, 0x21, 0x96, 0x31, 0x96, 0x2a, 0x96, 0x3d, 0x96, 0x3c, 0x96, 0x42, 0x96, 0x49, 0x96, 0x54, 0x96, 0x5f, 0x96, 0x67, 0x96, 0x6c, 0x96, 0x72, 0x96, 0x74, 0x96, 0x88, 0x96, 0x8d, 0x96, 0x97, 0x96, 0xb0, 0x96, 0x97, 0x90, 0x9b, 0x90, 0x9d, 0x90, 0x99, 0x90, 0xac, 0x90, 0xa1, 0x90, 0xb4, 0x90, 0xb3, 0x90, 0xb6, 0x90, 0xba, 0x90, 0xb8, 0x90, 0xb0, 0x90, 0xcf, 0x90, 0xc5, 0x90, 0xbe, 0x90, 0xd0, 0x90, 0xc4, 0x90, 0xc7, 0x90, 0xd3, 0x90, 0xe6, 0x90, 0xe2, 0x90, 0xdc, 0x90, 0xd7, 0x90, 0xdb, 0x90, 0xeb, 0x90, 0xef, 0x90, 0xfe, 0x90, 0x04, 0x91, 0x22, 0x91, 0x1e, 0x91, 0x23, 0x91, 0x31, 0x91, 0x2f, 0x91, 0x39, 0x91, 0x43, 0x91, 0x46, 0x91, 0x0d, 0x52, 0x42, 0x59, 0xa2, 0x52, 0xac, 0x52, 0xad, 0x52, 0xbe, 0x52, 0xff, 0x54, 0xd0, 0x52, 0xd6, 0x52, 0xf0, 0x52, 0xdf, 0x53, 0xee, 0x71, 0xcd, 0x77, 0xf4, 0x5e, 0xf5, 0x51, 0xfc, 0x51, 0x2f, 0x9b, 0xb6, 0x53, 0x01, 0x5f, 0x5a, 0x75, 0xef, 0x5d, 0x4c, 0x57, 0xa9, 0x57, 0xa1, 0x57, 0x7e, 0x58, 0xbc, 0x58, 0xc5, 0x58, 0xd1, 0x58, 0x29, 0x57, 0x2c, 0x57, 0x2a, 0x57, 0x33, 0x57, 0x39, 0x57, 0x2e, 0x57, 0x2f, 0x57, 0x5c, 0x57, 0x3b, 0x57, 0x42, 0x57, 0x69, 0x57, 0x85, 0x57, 0x6b, 0x57, 0x86, 0x57, 0x7c, 0x57, 0x7b, 0x57, 0x68, 0x57, 0x6d, 0x57, 0x76, 0x57, 0x73, 0x57, 0xad, 0x57, 0xa4, 0x57, 0x8c, 0x57, 0xb2, 0x57, 0xcf, 0x57, 0xa7, 0x57, 0xb4, 0x57, 0x93, 0x57, 0xa0, 0x57, 0xd5, 0x57, 0xd8, 0x57, 0xda, 0x57, 0xd9, 0x57, 0xd2, 0x57, 0xb8, 0x57, 0xf4, 0x57, 0xef, 0x57, 0xf8, 0x57, 0xe4, 0x57, 0xdd, 0x57, 0x0b, 0x58, 0x0d, 0x58, 0xfd, 0x57, 0xed, 0x57, 0x00, 0x58, 0x1e, 0x58, 0x19, 0x58, 0x44, 0x58, 0x20, 0x58, 0x65, 0x58, 0x6c, 0x58, 0x81, 0x58, 0x89, 0x58, 0x9a, 0x58, 0x80, 0x58, 0xa8, 0x99, 0x19, 0x9f, 0xff, 0x61, 0x79, 0x82, 0x7d, 0x82, 0x7f, 0x82, 0x8f, 0x82, 0x8a, 0x82, 0xa8, 0x82, 0x84, 0x82, 0x8e, 0x82, 0x91, 0x82, 0x97, 0x82, 0x99, 0x82, 0xab, 0x82, 0xb8, 0x82, 0xbe, 0x82, 0xb0, 0x82, 0xc8, 0x82, 0xca, 0x82, 0xe3, 0x82, 0x98, 0x82, 0xb7, 0x82, 0xae, 0x82, 0xcb, 0x82, 0xcc, 0x82, 0xc1, 0x82, 0xa9, 0x82, 0xb4, 0x82, 0xa1, 0x82, 0xaa, 0x82, 0x9f, 0x82, 0xc4, 0x82, 0xce, 0x82, 0xa4, 0x82, 0xe1, 0x82, 0x09, 0x83, 0xf7, 0x82, 0xe4, 0x82, 0x0f, 0x83, 0x07, 0x83, 0xdc, 0x82, 0xf4, 0x82, 0xd2, 0x82, 0xd8, 0x82, 0x0c, 0x83, 0xfb, 0x82, 0xd3, 0x82, 0x11, 0x83, 0x1a, 0x83, 0x06, 0x83, 0x14, 0x83, 0x15, 0x83, 0xe0, 0x82, 0xd5, 0x82, 0x1c, 0x83, 0x51, 0x83, 0x5b, 0x83, 0x5c, 0x83, 0x08, 0x83, 0x92, 0x83, 0x3c, 0x83, 0x34, 0x83, 0x31, 0x83, 0x9b, 0x83, 0x5e, 0x83, 0x2f, 0x83, 0x4f, 0x83, 0x47, 0x83, 0x43, 0x83, 0x5f, 0x83, 0x40, 0x83, 0x17, 0x83, 0x60, 0x83, 0x2d, 0x83, 0x3a, 0x83, 0x33, 0x83, 0x66, 0x83, 0x65, 0x83, 0x68, 0x83, 0x1b, 0x83, 0x69, 0x83, 0x6c, 0x83, 0x6a, 0x83, 0x6d, 0x83, 0x6e, 0x83, 0xb0, 0x83, 0x78, 0x83, 0xb3, 0x83, 0xb4, 0x83, 0xa0, 0x83, 0xaa, 0x83, 0x93, 0x83, 0x9c, 0x83, 0x85, 0x83, 0x7c, 0x83, 0xb6, 0x83, 0xa9, 0x83, 0x7d, 0x83, 0xb8, 0x83, 0x7b, 0x83, 0x98, 0x83, 0x9e, 0x83, 0xa8, 0x83, 0xba, 0x83, 0xbc, 0x83, 0xc1, 0x83, 0x01, 0x84, 0xe5, 0x83, 0xd8, 0x83, 0x07, 0x58, 0x18, 0x84, 0x0b, 0x84, 0xdd, 0x83, 0xfd, 0x83, 0xd6, 0x83, 0x1c, 0x84, 0x38, 0x84, 0x11, 0x84, 0x06, 0x84, 0xd4, 0x83, 0xdf, 0x83, 0x0f, 0x84, 0x03, 0x84, 0xf8, 0x83, 0xf9, 0x83, 0xea, 0x83, 0xc5, 0x83, 0xc0, 0x83, 0x26, 0x84, 0xf0, 0x83, 0xe1, 0x83, 0x5c, 0x84, 0x51, 0x84, 0x5a, 0x84, 0x59, 0x84, 0x73, 0x84, 0x87, 0x84, 0x88, 0x84, 0x7a, 0x84, 0x89, 0x84, 0x78, 0x84, 0x3c, 0x84, 0x46, 0x84, 0x69, 0x84, 0x76, 0x84, 0x8c, 0x84, 0x8e, 0x84, 0x31, 0x84, 0x6d, 0x84, 0xc1, 0x84, 0xcd, 0x84, 0xd0, 0x84, 0xe6, 0x84, 0xbd, 0x84, 0xd3, 0x84, 0xca, 0x84, 0xbf, 0x84, 0xba, 0x84, 0xe0, 0x84, 0xa1, 0x84, 0xb9, 0x84, 0xb4, 0x84, 0x97, 0x84, 0xe5, 0x84, 0xe3, 0x84, 0x0c, 0x85, 0x0d, 0x75, 0x38, 0x85, 0xf0, 0x84, 0x39, 0x85, 0x1f, 0x85, 0x3a, 0x85, 0x56, 0x85, 0x3b, 0x85, 0xff, 0x84, 0xfc, 0x84, 0x59, 0x85, 0x48, 0x85, 0x68, 0x85, 0x64, 0x85, 0x5e, 0x85, 0x7a, 0x85, 0xa2, 0x77, 0x43, 0x85, 0x72, 0x85, 0x7b, 0x85, 0xa4, 0x85, 0xa8, 0x85, 0x87, 0x85, 0x8f, 0x85, 0x79, 0x85, 0xae, 0x85, 0x9c, 0x85, 0x85, 0x85, 0xb9, 0x85, 0xb7, 0x85, 0xb0, 0x85, 0xd3, 0x85, 0xc1, 0x85, 0xdc, 0x85, 0xff, 0x85, 0x27, 0x86, 0x05, 0x86, 0x29, 0x86, 0x16, 0x86, 0x3c, 0x86, 0xfe, 0x5e, 0x08, 0x5f, 0x3c, 0x59, 0x41, 0x59, 0x37, 0x80, 0x55, 0x59, 0x5a, 0x59, 0x58, 0x59, 0x0f, 0x53, 0x22, 0x5c, 0x25, 0x5c, 0x2c, 0x5c, 0x34, 0x5c, 0x4c, 0x62, 0x6a, 0x62, 0x9f, 0x62, 0xbb, 0x62, 0xca, 0x62, 0xda, 0x62, 0xd7, 0x62, 0xee, 0x62, 0x22, 0x63, 0xf6, 0x62, 0x39, 0x63, 0x4b, 0x63, 0x43, 0x63, 0xad, 0x63, 0xf6, 0x63, 0x71, 0x63, 0x7a, 0x63, 0x8e, 0x63, 0xb4, 0x63, 0x6d, 0x63, 0xac, 0x63, 0x8a, 0x63, 0x69, 0x63, 0xae, 0x63, 0xbc, 0x63, 0xf2, 0x63, 0xf8, 0x63, 0xe0, 0x63, 0xff, 0x63, 0xc4, 0x63, 0xde, 0x63, 0xce, 0x63, 0x52, 0x64, 0xc6, 0x63, 0xbe, 0x63, 0x45, 0x64, 0x41, 0x64, 0x0b, 0x64, 0x1b, 0x64, 0x20, 0x64, 0x0c, 0x64, 0x26, 0x64, 0x21, 0x64, 0x5e, 0x64, 0x84, 0x64, 0x6d, 0x64, 0x96, 0x64, 0x7a, 0x64, 0xb7, 0x64, 0xb8, 0x64, 0x99, 0x64, 0xba, 0x64, 0xc0, 0x64, 0xd0, 0x64, 0xd7, 0x64, 0xe4, 0x64, 0xe2, 0x64, 0x09, 0x65, 0x25, 0x65, 0x2e, 0x65, 0x0b, 0x5f, 0xd2, 0x5f, 0x19, 0x75, 0x11, 0x5f, 0x5f, 0x53, 0xf1, 0x53, 0xfd, 0x53, 0xe9, 0x53, 0xe8, 0x53, 0xfb, 0x53, 0x12, 0x54, 0x16, 0x54, 0x06, 0x54, 0x4b, 0x54, 0x52, 0x54, 0x53, 0x54, 0x54, 0x54, 0x56, 0x54, 0x43, 0x54, 0x21, 0x54, 0x57, 0x54, 0x59, 0x54, 0x23, 0x54, 0x32, 0x54, 0x82, 0x54, 0x94, 0x54, 0x77, 0x54, 0x71, 0x54, 0x64, 0x54, 0x9a, 0x54, 0x9b, 0x54, 0x84, 0x54, 0x76, 0x54, 0x66, 0x54, 0x9d, 0x54, 0xd0, 0x54, 0xad, 0x54, 0xc2, 0x54, 0xb4, 0x54, 0xd2, 0x54, 0xa7, 0x54, 0xa6, 0x54, 0xd3, 0x54, 0xd4, 0x54, 0x72, 0x54, 0xa3, 0x54, 0xd5, 0x54, 0xbb, 0x54, 0xbf, 0x54, 0xcc, 0x54, 0xd9, 0x54, 0xda, 0x54, 0xdc, 0x54, 0xa9, 0x54, 0xaa, 0x54, 0xa4, 0x54, 0xdd, 0x54, 0xcf, 0x54, 0xde, 0x54, 0x1b, 0x55, 0xe7, 0x54, 0x20, 0x55, 0xfd, 0x54, 0x14, 0x55, 0xf3, 0x54, 0x22, 0x55, 0x23, 0x55, 0x0f, 0x55, 0x11, 0x55, 0x27, 0x55, 0x2a, 0x55, 0x67, 0x55, 0x8f, 0x55, 0xb5, 0x55, 0x49, 0x55, 0x6d, 0x55, 0x41, 0x55, 0x55, 0x55, 0x3f, 0x55, 0x50, 0x55, 0x3c, 0x55, 0x37, 0x55, 0x56, 0x55, 0x75, 0x55, 0x76, 0x55, 0x77, 0x55, 0x33, 0x55, 0x30, 0x55, 0x5c, 0x55, 0x8b, 0x55, 0xd2, 0x55, 0x83, 0x55, 0xb1, 0x55, 0xb9, 0x55, 0x88, 0x55, 0x81, 0x55, 0x9f, 0x55, 0x7e, 0x55, 0xd6, 0x55, 0x91, 0x55, 0x7b, 0x55, 0xdf, 0x55, 0xbd, 0x55, 0xbe, 0x55, 0x94, 0x55, 0x99, 0x55, 0xea, 0x55, 0xf7, 0x55, 0xc9, 0x55, 0x1f, 0x56, 0xd1, 0x55, 0xeb, 0x55, 0xec, 0x55, 0xd4, 0x55, 0xe6, 0x55, 0xdd, 0x55, 0xc4, 0x55, 0xef, 0x55, 0xe5, 0x55, 0xf2, 0x55, 0xf3, 0x55, 0xcc, 0x55, 0xcd, 0x55, 0xe8, 0x55, 0xf5, 0x55, 0xe4, 0x55, 0x94, 0x8f, 0x1e, 0x56, 0x08, 0x56, 0x0c, 0x56, 0x01, 0x56, 0x24, 0x56, 0x23, 0x56, 0xfe, 0x55, 0x00, 0x56, 0x27, 0x56, 0x2d, 0x56, 0x58, 0x56, 0x39, 0x56, 0x57, 0x56, 0x2c, 0x56, 0x4d, 0x56, 0x62, 0x56, 0x59, 0x56, 0x5c, 0x56, 0x4c, 0x56, 0x54, 0x56, 0x86, 0x56, 0x64, 0x56, 0x71, 0x56, 0x6b, 0x56, 0x7b, 0x56, 0x7c, 0x56, 0x85, 0x56, 0x93, 0x56, 0xaf, 0x56, 0xd4, 0x56, 0xd7, 0x56, 0xdd, 0x56, 0xe1, 0x56, 0xf5, 0x56, 0xeb, 0x56, 0xf9, 0x56, 0xff, 0x56, 0x04, 0x57, 0x0a, 0x57, 0x09, 0x57, 0x1c, 0x57, 0x0f, 0x5e, 0x19, 0x5e, 0x14, 0x5e, 0x11, 0x5e, 0x31, 0x5e, 0x3b, 0x5e, 0x3c, 0x5e, 0x37, 0x5e, 0x44, 0x5e, 0x54, 0x5e, 0x5b, 0x5e, 0x5e, 0x5e, 0x61, 0x5e, 0x8c, 0x5c, 0x7a, 0x5c, 0x8d, 0x5c, 0x90, 0x5c, 0x96, 0x5c, 0x88, 0x5c, 0x98, 0x5c, 0x99, 0x5c, 0x91, 0x5c, 0x9a, 0x5c, 0x9c, 0x5c, 0xb5, 0x5c, 0xa2, 0x5c, 0xbd, 0x5c, 0xac, 0x5c, 0xab, 0x5c, 0xb1, 0x5c, 0xa3, 0x5c, 0xc1, 0x5c, 0xb7, 0x5c, 0xc4, 0x5c, 0xd2, 0x5c, 0xe4, 0x5c, 0xcb, 0x5c, 0xe5, 0x5c, 0x02, 0x5d, 0x03, 0x5d, 0x27, 0x5d, 0x26, 0x5d, 0x2e, 0x5d, 0x24, 0x5d, 0x1e, 0x5d, 0x06, 0x5d, 0x1b, 0x5d, 0x58, 0x5d, 0x3e, 0x5d, 0x34, 0x5d, 0x3d, 0x5d, 0x6c, 0x5d, 0x5b, 0x5d, 0x6f, 0x5d, 0x5d, 0x5d, 0x6b, 0x5d, 0x4b, 0x5d, 0x4a, 0x5d, 0x69, 0x5d, 0x74, 0x5d, 0x82, 0x5d, 0x99, 0x5d, 0x9d, 0x5d, 0x73, 0x8c, 0xb7, 0x5d, 0xc5, 0x5d, 0x73, 0x5f, 0x77, 0x5f, 0x82, 0x5f, 0x87, 0x5f, 0x89, 0x5f, 0x8c, 0x5f, 0x95, 0x5f, 0x99, 0x5f, 0x9c, 0x5f, 0xa8, 0x5f, 0xad, 0x5f, 0xb5, 0x5f, 0xbc, 0x5f, 0x62, 0x88, 0x61, 0x5f, 0xad, 0x72, 0xb0, 0x72, 0xb4, 0x72, 0xb7, 0x72, 0xb8, 0x72, 0xc3, 0x72, 0xc1, 0x72, 0xce, 0x72, 0xcd, 0x72, 0xd2, 0x72, 0xe8, 0x72, 0xef, 0x72, 0xe9, 0x72, 0xf2, 0x72, 0xf4, 0x72, 0xf7, 0x72, 0x01, 0x73, 0xf3, 0x72, 0x03, 0x73, 0xfa, 0x72, 0xfb, 0x72, 0x17, 0x73, 0x13, 0x73, 0x21, 0x73, 0x0a, 0x73, 0x1e, 0x73, 0x1d, 0x73, 0x15, 0x73, 0x22, 0x73, 0x39, 0x73, 0x25, 0x73, 0x2c, 0x73, 0x38, 0x73, 0x31, 0x73, 0x50, 0x73, 0x4d, 0x73, 0x57, 0x73, 0x60, 0x73, 0x6c, 0x73, 0x6f, 0x73, 0x7e, 0x73, 0x1b, 0x82, 0x25, 0x59, 0xe7, 0x98, 0x24, 0x59, 0x02, 0x59, 0x63, 0x99, 0x67, 0x99, 0x68, 0x99, 0x69, 0x99, 0x6a, 0x99, 0x6b, 0x99, 0x6c, 0x99, 0x74, 0x99, 0x77, 0x99, 0x7d, 0x99, 0x80, 0x99, 0x84, 0x99, 0x87, 0x99, 0x8a, 0x99, 0x8d, 0x99, 0x90, 0x99, 0x91, 0x99, 0x93, 0x99, 0x94, 0x99, 0x95, 0x99, 0x80, 0x5e, 0x91, 0x5e, 0x8b, 0x5e, 0x96, 0x5e, 0xa5, 0x5e, 0xa0, 0x5e, 0xb9, 0x5e, 0xb5, 0x5e, 0xbe, 0x5e, 0xb3, 0x5e, 0x53, 0x8d, 0xd2, 0x5e, 0xd1, 0x5e, 0xdb, 0x5e, 0xe8, 0x5e, 0xea, 0x5e, 0xba, 0x81, 0xc4, 0x5f, 0xc9, 0x5f, 0xd6, 0x5f, 0xcf, 0x5f, 0x03, 0x60, 0xee, 0x5f, 0x04, 0x60, 0xe1, 0x5f, 0xe4, 0x5f, 0xfe, 0x5f, 0x05, 0x60, 0x06, 0x60, 0xea, 0x5f, 0xed, 0x5f, 0xf8, 0x5f, 0x19, 0x60, 0x35, 0x60, 0x26, 0x60, 0x1b, 0x60, 0x0f, 0x60, 0x0d, 0x60, 0x29, 0x60, 0x2b, 0x60, 0x0a, 0x60, 0x3f, 0x60, 0x21, 0x60, 0x78, 0x60, 0x79, 0x60, 0x7b, 0x60, 0x7a, 0x60, 0x42, 0x60, 0x6a, 0x60, 0x7d, 0x60, 0x96, 0x60, 0x9a, 0x60, 0xad, 0x60, 0x9d, 0x60, 0x83, 0x60, 0x92, 0x60, 0x8c, 0x60, 0x9b, 0x60, 0xec, 0x60, 0xbb, 0x60, 0xb1, 0x60, 0xdd, 0x60, 0xd8, 0x60, 0xc6, 0x60, 0xda, 0x60, 0xb4, 0x60, 0x20, 0x61, 0x26, 0x61, 0x15, 0x61, 0x23, 0x61, 0xf4, 0x60, 0x00, 0x61, 0x0e, 0x61, 0x2b, 0x61, 0x4a, 0x61, 0x75, 0x61, 0xac, 0x61, 0x94, 0x61, 0xa7, 0x61, 0xb7, 0x61, 0xd4, 0x61, 0xf5, 0x61, 0xdd, 0x5f, 0xb3, 0x96, 0xe9, 0x95, 0xeb, 0x95, 0xf1, 0x95, 0xf3, 0x95, 0xf5, 0x95, 0xf6, 0x95, 0xfc, 0x95, 0xfe, 0x95, 0x03, 0x96, 0x04, 0x96, 0x06, 0x96, 0x08, 0x96, 0x0a, 0x96, 0x0b, 0x96, 0x0c, 0x96, 0x0d, 0x96, 0x0f, 0x96, 0x12, 0x96, 0x15, 0x96, 0x16, 0x96, 0x17, 0x96, 0x19, 0x96, 0x1a, 0x96, 0x2c, 0x4e, 0x3f, 0x72, 0x15, 0x62, 0x35, 0x6c, 0x54, 0x6c, 0x5c, 0x6c, 0x4a, 0x6c, 0xa3, 0x6c, 0x85, 0x6c, 0x90, 0x6c, 0x94, 0x6c, 0x8c, 0x6c, 0x68, 0x6c, 0x69, 0x6c, 0x74, 0x6c, 0x76, 0x6c, 0x86, 0x6c, 0xa9, 0x6c, 0xd0, 0x6c, 0xd4, 0x6c, 0xad, 0x6c, 0xf7, 0x6c, 0xf8, 0x6c, 0xf1, 0x6c, 0xd7, 0x6c, 0xb2, 0x6c, 0xe0, 0x6c, 0xd6, 0x6c, 0xfa, 0x6c, 0xeb, 0x6c, 0xee, 0x6c, 0xb1, 0x6c, 0xd3, 0x6c, 0xef, 0x6c, 0xfe, 0x6c, 0x39, 0x6d, 0x27, 0x6d, 0x0c, 0x6d, 0x43, 0x6d, 0x48, 0x6d, 0x07, 0x6d, 0x04, 0x6d, 0x19, 0x6d, 0x0e, 0x6d, 0x2b, 0x6d, 0x4d, 0x6d, 0x2e, 0x6d, 0x35, 0x6d, 0x1a, 0x6d, 0x4f, 0x6d, 0x52, 0x6d, 0x54, 0x6d, 0x33, 0x6d, 0x91, 0x6d, 0x6f, 0x6d, 0x9e, 0x6d, 0xa0, 0x6d, 0x5e, 0x6d, 0x93, 0x6d, 0x94, 0x6d, 0x5c, 0x6d, 0x60, 0x6d, 0x7c, 0x6d, 0x63, 0x6d, 0x1a, 0x6e, 0xc7, 0x6d, 0xc5, 0x6d, 0xde, 0x6d, 0x0e, 0x6e, 0xbf, 0x6d, 0xe0, 0x6d, 0x11, 0x6e, 0xe6, 0x6d, 0xdd, 0x6d, 0xd9, 0x6d, 0x16, 0x6e, 0xab, 0x6d, 0x0c, 0x6e, 0xae, 0x6d, 0x2b, 0x6e, 0x6e, 0x6e, 0x4e, 0x6e, 0x6b, 0x6e, 0xb2, 0x6e, 0x5f, 0x6e, 0x86, 0x6e, 0x53, 0x6e, 0x54, 0x6e, 0x32, 0x6e, 0x25, 0x6e, 0x44, 0x6e, 0xdf, 0x6e, 0xb1, 0x6e, 0x98, 0x6e, 0xe0, 0x6e, 0x2d, 0x6f, 0xe2, 0x6e, 0xa5, 0x6e, 0xa7, 0x6e, 0xbd, 0x6e, 0xbb, 0x6e, 0xb7, 0x6e, 0xd7, 0x6e, 0xb4, 0x6e, 0xcf, 0x6e, 0x8f, 0x6e, 0xc2, 0x6e, 0x9f, 0x6e, 0x62, 0x6f, 0x46, 0x6f, 0x47, 0x6f, 0x24, 0x6f, 0x15, 0x6f, 0xf9, 0x6e, 0x2f, 0x6f, 0x36, 0x6f, 0x4b, 0x6f, 0x74, 0x6f, 0x2a, 0x6f, 0x09, 0x6f, 0x29, 0x6f, 0x89, 0x6f, 0x8d, 0x6f, 0x8c, 0x6f, 0x78, 0x6f, 0x72, 0x6f, 0x7c, 0x6f, 0x7a, 0x6f, 0xd1, 0x6f, 0xc9, 0x6f, 0xa7, 0x6f, 0xb9, 0x6f, 0xb6, 0x6f, 0xc2, 0x6f, 0xe1, 0x6f, 0xee, 0x6f, 0xde, 0x6f, 0xe0, 0x6f, 0xef, 0x6f, 0x1a, 0x70, 0x23, 0x70, 0x1b, 0x70, 0x39, 0x70, 0x35, 0x70, 0x4f, 0x70, 0x5e, 0x70, 0x80, 0x5b, 0x84, 0x5b, 0x95, 0x5b, 0x93, 0x5b, 0xa5, 0x5b, 0xb8, 0x5b, 0x2f, 0x75, 0x9e, 0x9a, 0x34, 0x64, 0xe4, 0x5b, 0xee, 0x5b, 0x30, 0x89, 0xf0, 0x5b, 0x47, 0x8e, 0x07, 0x8b, 0xb6, 0x8f, 0xd3, 0x8f, 0xd5, 0x8f, 0xe5, 0x8f, 0xee, 0x8f, 0xe4, 0x8f, 0xe9, 0x8f, 0xe6, 0x8f, 0xf3, 0x8f, 0xe8, 0x8f, 0x05, 0x90, 0x04, 0x90, 0x0b, 0x90, 0x26, 0x90, 0x11, 0x90, 0x0d, 0x90, 0x16, 0x90, 0x21, 0x90, 0x35, 0x90, 0x36, 0x90, 0x2d, 0x90, 0x2f, 0x90, 0x44, 0x90, 0x51, 0x90, 0x52, 0x90, 0x50, 0x90, 0x68, 0x90, 0x58, 0x90, 0x62, 0x90, 0x5b, 0x90, 0xb9, 0x66, 0x74, 0x90, 0x7d, 0x90, 0x82, 0x90, 0x88, 0x90, 0x83, 0x90, 0x8b, 0x90, 0x50, 0x5f, 0x57, 0x5f, 0x56, 0x5f, 0x58, 0x5f, 0x3b, 0x5c, 0xab, 0x54, 0x50, 0x5c, 0x59, 0x5c, 0x71, 0x5b, 0x63, 0x5c, 0x66, 0x5c, 0xbc, 0x7f, 0x2a, 0x5f, 0x29, 0x5f, 0x2d, 0x5f, 0x74, 0x82, 0x3c, 0x5f, 0x3b, 0x9b, 0x6e, 0x5c, 0x81, 0x59, 0x83, 0x59, 0x8d, 0x59, 0xa9, 0x59, 0xaa, 0x59, 0xa3, 0x59, 0x97, 0x59, 0xca, 0x59, 0xab, 0x59, 0x9e, 0x59, 0xa4, 0x59, 0xd2, 0x59, 0xb2, 0x59, 0xaf, 0x59, 0xd7, 0x59, 0xbe, 0x59, 0x05, 0x5a, 0x06, 0x5a, 0xdd, 0x59, 0x08, 0x5a, 0xe3, 0x59, 0xd8, 0x59, 0xf9, 0x59, 0x0c, 0x5a, 0x09, 0x5a, 0x32, 0x5a, 0x34, 0x5a, 0x11, 0x5a, 0x23, 0x5a, 0x13, 0x5a, 0x40, 0x5a, 0x67, 0x5a, 0x4a, 0x5a, 0x55, 0x5a, 0x3c, 0x5a, 0x62, 0x5a, 0x75, 0x5a, 0xec, 0x80, 0xaa, 0x5a, 0x9b, 0x5a, 0x77, 0x5a, 0x7a, 0x5a, 0xbe, 0x5a, 0xeb, 0x5a, 0xb2, 0x5a, 0xd2, 0x5a, 0xd4, 0x5a, 0xb8, 0x5a, 0xe0, 0x5a, 0xe3, 0x5a, 0xf1, 0x5a, 0xd6, 0x5a, 0xe6, 0x5a, 0xd8, 0x5a, 0xdc, 0x5a, 0x09, 0x5b, 0x17, 0x5b, 0x16, 0x5b, 0x32, 0x5b, 0x37, 0x5b, 0x40, 0x5b, 0x15, 0x5c, 0x1c, 0x5c, 0x5a, 0x5b, 0x65, 0x5b, 0x73, 0x5b, 0x51, 0x5b, 0x53, 0x5b, 0x62, 0x5b, 0x75, 0x9a, 0x77, 0x9a, 0x78, 0x9a, 0x7a, 0x9a, 0x7f, 0x9a, 0x7d, 0x9a, 0x80, 0x9a, 0x81, 0x9a, 0x85, 0x9a, 0x88, 0x9a, 0x8a, 0x9a, 0x90, 0x9a, 0x92, 0x9a, 0x93, 0x9a, 0x96, 0x9a, 0x98, 0x9a, 0x9b, 0x9a, 0x9c, 0x9a, 0x9d, 0x9a, 0x9f, 0x9a, 0xa0, 0x9a, 0xa2, 0x9a, 0xa3, 0x9a, 0xa5, 0x9a, 0xa7, 0x9a, 0x9f, 0x7e, 0xa1, 0x7e, 0xa3, 0x7e, 0xa5, 0x7e, 0xa8, 0x7e, 0xa9, 0x7e, 0xad, 0x7e, 0xb0, 0x7e, 0xbe, 0x7e, 0xc0, 0x7e, 0xc1, 0x7e, 0xc2, 0x7e, 0xc9, 0x7e, 0xcb, 0x7e, 0xcc, 0x7e, 0xd0, 0x7e, 0xd4, 0x7e, 0xd7, 0x7e, 0xdb, 0x7e, 0xe0, 0x7e, 0xe1, 0x7e, 0xe8, 0x7e, 0xeb, 0x7e, 0xee, 0x7e, 0xef, 0x7e, 0xf1, 0x7e, 0xf2, 0x7e, 0x0d, 0x7f, 0xf6, 0x7e, 0xfa, 0x7e, 0xfb, 0x7e, 0xfe, 0x7e, 0x01, 0x7f, 0x02, 0x7f, 0x03, 0x7f, 0x07, 0x7f, 0x08, 0x7f, 0x0b, 0x7f, 0x0c, 0x7f, 0x0f, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x17, 0x7f, 0x19, 0x7f, 0x1c, 0x7f, 0x1b, 0x7f, 0x1f, 0x7f, 0x21, 0x7f, 0x22, 0x7f, 0x23, 0x7f, 0x24, 0x7f, 0x25, 0x7f, 0x26, 0x7f, 0x27, 0x7f, 0x2a, 0x7f, 0x2b, 0x7f, 0x2c, 0x7f, 0x2d, 0x7f, 0x2f, 0x7f, 0x30, 0x7f, 0x31, 0x7f, 0x32, 0x7f, 0x33, 0x7f, 0x35, 0x7f, 0x7a, 0x5e, 0x7f, 0x75, 0xdb, 0x5d, 0x3e, 0x75, 0x95, 0x90, 0x8e, 0x73, 0x91, 0x73, 0xae, 0x73, 0xa2, 0x73, 0x9f, 0x73, 0xcf, 0x73, 0xc2, 0x73, 0xd1, 0x73, 0xb7, 0x73, 0xb3, 0x73, 0xc0, 0x73, 0xc9, 0x73, 0xc8, 0x73, 0xe5, 0x73, 0xd9, 0x73, 0x7c, 0x98, 0x0a, 0x74, 0xe9, 0x73, 0xe7, 0x73, 0xde, 0x73, 0xba, 0x73, 0xf2, 0x73, 0x0f, 0x74, 0x2a, 0x74, 0x5b, 0x74, 0x26, 0x74, 0x25, 0x74, 0x28, 0x74, 0x30, 0x74, 0x2e, 0x74, 0x2c, 0x74, 0x1b, 0x74, 0x1a, 0x74, 0x41, 0x74, 0x5c, 0x74, 0x57, 0x74, 0x55, 0x74, 0x59, 0x74, 0x77, 0x74, 0x6d, 0x74, 0x7e, 0x74, 0x9c, 0x74, 0x8e, 0x74, 0x80, 0x74, 0x81, 0x74, 0x87, 0x74, 0x8b, 0x74, 0x9e, 0x74, 0xa8, 0x74, 0xa9, 0x74, 0x90, 0x74, 0xa7, 0x74, 0xd2, 0x74, 0xba, 0x74, 0xea, 0x97, 0xeb, 0x97, 0xec, 0x97, 0x4c, 0x67, 0x53, 0x67, 0x5e, 0x67, 0x48, 0x67, 0x69, 0x67, 0xa5, 0x67, 0x87, 0x67, 0x6a, 0x67, 0x73, 0x67, 0x98, 0x67, 0xa7, 0x67, 0x75, 0x67, 0xa8, 0x67, 0x9e, 0x67, 0xad, 0x67, 0x8b, 0x67, 0x77, 0x67, 0x7c, 0x67, 0xf0, 0x67, 0x09, 0x68, 0xd8, 0x67, 0x0a, 0x68, 0xe9, 0x67, 0xb0, 0x67, 0x0c, 0x68, 0xd9, 0x67, 0xb5, 0x67, 0xda, 0x67, 0xb3, 0x67, 0xdd, 0x67, 0x00, 0x68, 0xc3, 0x67, 0xb8, 0x67, 0xe2, 0x67, 0x0e, 0x68, 0xc1, 0x67, 0xfd, 0x67, 0x32, 0x68, 0x33, 0x68, 0x60, 0x68, 0x61, 0x68, 0x4e, 0x68, 0x62, 0x68, 0x44, 0x68, 0x64, 0x68, 0x83, 0x68, 0x1d, 0x68, 0x55, 0x68, 0x66, 0x68, 0x41, 0x68, 0x67, 0x68, 0x40, 0x68, 0x3e, 0x68, 0x4a, 0x68, 0x49, 0x68, 0x29, 0x68, 0xb5, 0x68, 0x8f, 0x68, 0x74, 0x68, 0x77, 0x68, 0x93, 0x68, 0x6b, 0x68, 0xc2, 0x68, 0x6e, 0x69, 0xfc, 0x68, 0x1f, 0x69, 0x20, 0x69, 0xf9, 0x68, 0x24, 0x69, 0xf0, 0x68, 0x0b, 0x69, 0x01, 0x69, 0x57, 0x69, 0xe3, 0x68, 0x10, 0x69, 0x71, 0x69, 0x39, 0x69, 0x60, 0x69, 0x42, 0x69, 0x5d, 0x69, 0x84, 0x69, 0x6b, 0x69, 0x80, 0x69, 0x98, 0x69, 0x78, 0x69, 0x34, 0x69, 0xcc, 0x69, 0x87, 0x69, 0x88, 0x69, 0xce, 0x69, 0x89, 0x69, 0x66, 0x69, 0x63, 0x69, 0x79, 0x69, 0x9b, 0x69, 0xa7, 0x69, 0xbb, 0x69, 0xab, 0x69, 0xad, 0x69, 0xd4, 0x69, 0xb1, 0x69, 0xc1, 0x69, 0xca, 0x69, 0xdf, 0x69, 0x95, 0x69, 0xe0, 0x69, 0x8d, 0x69, 0xff, 0x69, 0x2f, 0x6a, 0xed, 0x69, 0x17, 0x6a, 0x18, 0x6a, 0x65, 0x6a, 0xf2, 0x69, 0x44, 0x6a, 0x3e, 0x6a, 0xa0, 0x6a, 0x50, 0x6a, 0x5b, 0x6a, 0x35, 0x6a, 0x8e, 0x6a, 0x79, 0x6a, 0x3d, 0x6a, 0x28, 0x6a, 0x58, 0x6a, 0x7c, 0x6a, 0x91, 0x6a, 0x90, 0x6a, 0xa9, 0x6a, 0x97, 0x6a, 0xab, 0x6a, 0x37, 0x73, 0x52, 0x73, 0x81, 0x6b, 0x82, 0x6b, 0x87, 0x6b, 0x84, 0x6b, 0x92, 0x6b, 0x93, 0x6b, 0x8d, 0x6b, 0x9a, 0x6b, 0x9b, 0x6b, 0xa1, 0x6b, 0xaa, 0x6b, 0x6b, 0x8f, 0x6d, 0x8f, 0x71, 0x8f, 0x72, 0x8f, 0x73, 0x8f, 0x75, 0x8f, 0x76, 0x8f, 0x78, 0x8f, 0x77, 0x8f, 0x79, 0x8f, 0x7a, 0x8f, 0x7c, 0x8f, 0x7e, 0x8f, 0x81, 0x8f, 0x82, 0x8f, 0x84, 0x8f, 0x87, 0x8f, 0x8b, 0x8f, 0x8d, 0x8f, 0x8e, 0x8f, 0x8f, 0x8f, 0x98, 0x8f, 0x9a, 0x8f, 0xce, 0x8e, 0x0b, 0x62, 0x17, 0x62, 0x1b, 0x62, 0x1f, 0x62, 0x22, 0x62, 0x21, 0x62, 0x25, 0x62, 0x24, 0x62, 0x2c, 0x62, 0xe7, 0x81, 0xef, 0x74, 0xf4, 0x74, 0xff, 0x74, 0x0f, 0x75, 0x11, 0x75, 0x13, 0x75, 0x34, 0x65, 0xee, 0x65, 0xef, 0x65, 0xf0, 0x65, 0x0a, 0x66, 0x19, 0x66, 0x72, 0x67, 0x03, 0x66, 0x15, 0x66, 0x00, 0x66, 0x85, 0x70, 0xf7, 0x66, 0x1d, 0x66, 0x34, 0x66, 0x31, 0x66, 0x36, 0x66, 0x35, 0x66, 0x06, 0x80, 0x5f, 0x66, 0x54, 0x66, 0x41, 0x66, 0x4f, 0x66, 0x56, 0x66, 0x61, 0x66, 0x57, 0x66, 0x77, 0x66, 0x84, 0x66, 0x8c, 0x66, 0xa7, 0x66, 0x9d, 0x66, 0xbe, 0x66, 0xdb, 0x66, 0xdc, 0x66, 0xe6, 0x66, 0xe9, 0x66, 0x32, 0x8d, 0x33, 0x8d, 0x36, 0x8d, 0x3b, 0x8d, 0x3d, 0x8d, 0x40, 0x8d, 0x45, 0x8d, 0x46, 0x8d, 0x48, 0x8d, 0x49, 0x8d, 0x47, 0x8d, 0x4d, 0x8d, 0x55, 0x8d, 0x59, 0x8d, 0xc7, 0x89, 0xca, 0x89, 0xcb, 0x89, 0xcc, 0x89, 0xce, 0x89, 0xcf, 0x89, 0xd0, 0x89, 0xd1, 0x89, 0x6e, 0x72, 0x9f, 0x72, 0x5d, 0x72, 0x66, 0x72, 0x6f, 0x72, 0x7e, 0x72, 0x7f, 0x72, 0x84, 0x72, 0x8b, 0x72, 0x8d, 0x72, 0x8f, 0x72, 0x92, 0x72, 0x08, 0x63, 0x32, 0x63, 0xb0, 0x63, 0x3f, 0x64, 0xd8, 0x64, 0x04, 0x80, 0xea, 0x6b, 0xf3, 0x6b, 0xfd, 0x6b, 0xf5, 0x6b, 0xf9, 0x6b, 0x05, 0x6c, 0x07, 0x6c, 0x06, 0x6c, 0x0d, 0x6c, 0x15, 0x6c, 0x18, 0x6c, 0x19, 0x6c, 0x1a, 0x6c, 0x21, 0x6c, 0x29, 0x6c, 0x24, 0x6c, 0x2a, 0x6c, 0x32, 0x6c, 0x35, 0x65, 0x55, 0x65, 0x6b, 0x65, 0x4d, 0x72, 0x52, 0x72, 0x56, 0x72, 0x30, 0x72, 0x62, 0x86, 0x16, 0x52, 0x9f, 0x80, 0x9c, 0x80, 0x93, 0x80, 0xbc, 0x80, 0x0a, 0x67, 0xbd, 0x80, 0xb1, 0x80, 0xab, 0x80, 0xad, 0x80, 0xb4, 0x80, 0xb7, 0x80, 0xe7, 0x80, 0xe8, 0x80, 0xe9, 0x80, 0xea, 0x80, 0xdb, 0x80, 0xc2, 0x80, 0xc4, 0x80, 0xd9, 0x80, 0xcd, 0x80, 0xd7, 0x80, 0x10, 0x67, 0xdd, 0x80, 0xeb, 0x80, 0xf1, 0x80, 0xf4, 0x80, 0xed, 0x80, 0x0d, 0x81, 0x0e, 0x81, 0xf2, 0x80, 0xfc, 0x80, 0x15, 0x67, 0x12, 0x81, 0x5a, 0x8c, 0x36, 0x81, 0x1e, 0x81, 0x2c, 0x81, 0x18, 0x81, 0x32, 0x81, 0x48, 0x81, 0x4c, 0x81, 0x53, 0x81, 0x74, 0x81, 0x59, 0x81, 0x5a, 0x81, 0x71, 0x81, 0x60, 0x81, 0x69, 0x81, 0x7c, 0x81, 0x7d, 0x81, 0x6d, 0x81, 0x67, 0x81, 0x4d, 0x58, 0xb5, 0x5a, 0x88, 0x81, 0x82, 0x81, 0x91, 0x81, 0xd5, 0x6e, 0xa3, 0x81, 0xaa, 0x81, 0xcc, 0x81, 0x26, 0x67, 0xca, 0x81, 0xbb, 0x81, 0xc1, 0x81, 0xa6, 0x81, 0x24, 0x6b, 0x37, 0x6b, 0x39, 0x6b, 0x43, 0x6b, 0x46, 0x6b, 0x59, 0x6b, 0xd1, 0x98, 0xd2, 0x98, 0xd3, 0x98, 0xd5, 0x98, 0xd9, 0x98, 0xda, 0x98, 0xb3, 0x6b, 0x40, 0x5f, 0xc2, 0x6b, 0xf3, 0x89, 0x90, 0x65, 0x51, 0x9f, 0x93, 0x65, 0xbc, 0x65, 0xc6, 0x65, 0xc4, 0x65, 0xc3, 0x65, 0xcc, 0x65, 0xce, 0x65, 0xd2, 0x65, 0xd6, 0x65, 0x80, 0x70, 0x9c, 0x70, 0x96, 0x70, 0x9d, 0x70, 0xbb, 0x70, 0xc0, 0x70, 0xb7, 0x70, 0xab, 0x70, 0xb1, 0x70, 0xe8, 0x70, 0xca, 0x70, 0x10, 0x71, 0x13, 0x71, 0x16, 0x71, 0x2f, 0x71, 0x31, 0x71, 0x73, 0x71, 0x5c, 0x71, 0x68, 0x71, 0x45, 0x71, 0x72, 0x71, 0x4a, 0x71, 0x78, 0x71, 0x7a, 0x71, 0x98, 0x71, 0xb3, 0x71, 0xb5, 0x71, 0xa8, 0x71, 0xa0, 0x71, 0xe0, 0x71, 0xd4, 0x71, 0xe7, 0x71, 0xf9, 0x71, 0x1d, 0x72, 0x28, 0x72, 0x6c, 0x70, 0x18, 0x71, 0x66, 0x71, 0xb9, 0x71, 0x3e, 0x62, 0x3d, 0x62, 0x43, 0x62, 0x48, 0x62, 0x49, 0x62, 0x3b, 0x79, 0x40, 0x79, 0x46, 0x79, 0x49, 0x79, 0x5b, 0x79, 0x5c, 0x79, 0x53, 0x79, 0x5a, 0x79, 0x62, 0x79, 0x57, 0x79, 0x60, 0x79, 0x6f, 0x79, 0x67, 0x79, 0x7a, 0x79, 0x85, 0x79, 0x8a, 0x79, 0x9a, 0x79, 0xa7, 0x79, 0xb3, 0x79, 0xd1, 0x5f, 0xd0, 0x5f, 0x3c, 0x60, 0x5d, 0x60, 0x5a, 0x60, 0x67, 0x60, 0x41, 0x60, 0x59, 0x60, 0x63, 0x60, 0xab, 0x60, 0x06, 0x61, 0x0d, 0x61, 0x5d, 0x61, 0xa9, 0x61, 0x9d, 0x61, 0xcb, 0x61, 0xd1, 0x61, 0x06, 0x62, 0x80, 0x80, 0x7f, 0x80, 0x93, 0x6c, 0xf6, 0x6c, 0xfc, 0x6d, 0xf6, 0x77, 0xf8, 0x77, 0x00, 0x78, 0x09, 0x78, 0x17, 0x78, 0x18, 0x78, 0x11, 0x78, 0xab, 0x65, 0x2d, 0x78, 0x1c, 0x78, 0x1d, 0x78, 0x39, 0x78, 0x3a, 0x78, 0x3b, 0x78, 0x1f, 0x78, 0x3c, 0x78, 0x25, 0x78, 0x2c, 0x78, 0x23, 0x78, 0x29, 0x78, 0x4e, 0x78, 0x6d, 0x78, 0x56, 0x78, 0x57, 0x78, 0x26, 0x78, 0x50, 0x78, 0x47, 0x78, 0x4c, 0x78, 0x6a, 0x78, 0x9b, 0x78, 0x93, 0x78, 0x9a, 0x78, 0x87, 0x78, 0x9c, 0x78, 0xa1, 0x78, 0xa3, 0x78, 0xb2, 0x78, 0xb9, 0x78, 0xa5, 0x78, 0xd4, 0x78, 0xd9, 0x78, 0xc9, 0x78, 0xec, 0x78, 0xf2, 0x78, 0x05, 0x79, 0xf4, 0x78, 0x13, 0x79, 0x24, 0x79, 0x1e, 0x79, 0x34, 0x79, 0x9b, 0x9f, 0xf9, 0x9e, 0xfb, 0x9e, 0xfc, 0x9e, 0xf1, 0x76, 0x04, 0x77, 0x0d, 0x77, 0xf9, 0x76, 0x07, 0x77, 0x08, 0x77, 0x1a, 0x77, 0x22, 0x77, 0x19, 0x77, 0x2d, 0x77, 0x26, 0x77, 0x35, 0x77, 0x38, 0x77, 0x50, 0x77, 0x51, 0x77, 0x47, 0x77, 0x43, 0x77, 0x5a, 0x77, 0x68, 0x77, 0x62, 0x77, 0x65, 0x77, 0x7f, 0x77, 0x8d, 0x77, 0x7d, 0x77, 0x80, 0x77, 0x8c, 0x77, 0x91, 0x77, 0x9f, 0x77, 0xa0, 0x77, 0xb0, 0x77, 0xb5, 0x77, 0xbd, 0x77, 0x3a, 0x75, 0x40, 0x75, 0x4e, 0x75, 0x4b, 0x75, 0x48, 0x75, 0x5b, 0x75, 0x72, 0x75, 0x79, 0x75, 0x83, 0x75, 0x58, 0x7f, 0x61, 0x7f, 0x5f, 0x7f, 0x48, 0x8a, 0x68, 0x7f, 0x74, 0x7f, 0x71, 0x7f, 0x79, 0x7f, 0x81, 0x7f, 0x7e, 0x7f, 0xcd, 0x76, 0xe5, 0x76, 0x32, 0x88, 0x85, 0x94, 0x86, 0x94, 0x87, 0x94, 0x8b, 0x94, 0x8a, 0x94, 0x8c, 0x94, 0x8d, 0x94, 0x8f, 0x94, 0x90, 0x94, 0x94, 0x94, 0x97, 0x94, 0x95, 0x94, 0x9a, 0x94, 0x9b, 0x94, 0x9c, 0x94, 0xa3, 0x94, 0xa4, 0x94, 0xab, 0x94, 0xaa, 0x94, 0xad, 0x94, 0xac, 0x94, 0xaf, 0x94, 0xb0, 0x94, 0xb2, 0x94, 0xb4, 0x94, 0xb6, 0x94, 0xb7, 0x94, 0xb8, 0x94, 0xb9, 0x94, 0xba, 0x94, 0xbc, 0x94, 0xbd, 0x94, 0xbf, 0x94, 0xc4, 0x94, 0xc8, 0x94, 0xc9, 0x94, 0xca, 0x94, 0xcb, 0x94, 0xcc, 0x94, 0xcd, 0x94, 0xce, 0x94, 0xd0, 0x94, 0xd1, 0x94, 0xd2, 0x94, 0xd5, 0x94, 0xd6, 0x94, 0xd7, 0x94, 0xd9, 0x94, 0xd8, 0x94, 0xdb, 0x94, 0xde, 0x94, 0xdf, 0x94, 0xe0, 0x94, 0xe2, 0x94, 0xe4, 0x94, 0xe5, 0x94, 0xe7, 0x94, 0xe8, 0x94, 0xea, 0x94, 0xe9, 0x94, 0xeb, 0x94, 0xee, 0x94, 0xef, 0x94, 0xf3, 0x94, 0xf4, 0x94, 0xf5, 0x94, 0xf7, 0x94, 0xf9, 0x94, 0xfc, 0x94, 0xfd, 0x94, 0xff, 0x94, 0x03, 0x95, 0x02, 0x95, 0x06, 0x95, 0x07, 0x95, 0x09, 0x95, 0x0a, 0x95, 0x0d, 0x95, 0x0e, 0x95, 0x0f, 0x95, 0x12, 0x95, 0x13, 0x95, 0x14, 0x95, 0x15, 0x95, 0x16, 0x95, 0x18, 0x95, 0x1b, 0x95, 0x1d, 0x95, 0x1e, 0x95, 0x1f, 0x95, 0x22, 0x95, 0x2a, 0x95, 0x2b, 0x95, 0x29, 0x95, 0x2c, 0x95, 0x31, 0x95, 0x32, 0x95, 0x34, 0x95, 0x36, 0x95, 0x37, 0x95, 0x38, 0x95, 0x3c, 0x95, 0x3e, 0x95, 0x3f, 0x95, 0x42, 0x95, 0x35, 0x95, 0x44, 0x95, 0x45, 0x95, 0x46, 0x95, 0x49, 0x95, 0x4c, 0x95, 0x4e, 0x95, 0x4f, 0x95, 0x52, 0x95, 0x53, 0x95, 0x54, 0x95, 0x56, 0x95, 0x57, 0x95, 0x58, 0x95, 0x59, 0x95, 0x5b, 0x95, 0x5e, 0x95, 0x5f, 0x95, 0x5d, 0x95, 0x61, 0x95, 0x62, 0x95, 0x64, 0x95, 0x65, 0x95, 0x66, 0x95, 0x67, 0x95, 0x68, 0x95, 0x69, 0x95, 0x6a, 0x95, 0x6b, 0x95, 0x6c, 0x95, 0x6f, 0x95, 0x71, 0x95, 0x72, 0x95, 0x73, 0x95, 0x3a, 0x95, 0xe7, 0x77, 0xec, 0x77, 0xc9, 0x96, 0xd5, 0x79, 0xed, 0x79, 0xe3, 0x79, 0xeb, 0x79, 0x06, 0x7a, 0x47, 0x5d, 0x03, 0x7a, 0x02, 0x7a, 0x1e, 0x7a, 0x14, 0x7a, 0x39, 0x7a, 0x37, 0x7a, 0x51, 0x7a, 0xcf, 0x9e, 0xa5, 0x99, 0x70, 0x7a, 0x88, 0x76, 0x8e, 0x76, 0x93, 0x76, 0x99, 0x76, 0xa4, 0x76, 0xde, 0x74, 0xe0, 0x74, 0x2c, 0x75, 0x20, 0x9e, 0x22, 0x9e, 0x28, 0x9e, 0x29, 0x9e, 0x2a, 0x9e, 0x2b, 0x9e, 0x2c, 0x9e, 0x32, 0x9e, 0x31, 0x9e, 0x36, 0x9e, 0x38, 0x9e, 0x37, 0x9e, 0x39, 0x9e, 0x3a, 0x9e, 0x3e, 0x9e, 0x41, 0x9e, 0x42, 0x9e, 0x44, 0x9e, 0x46, 0x9e, 0x47, 0x9e, 0x48, 0x9e, 0x49, 0x9e, 0x4b, 0x9e, 0x4c, 0x9e, 0x4e, 0x9e, 0x51, 0x9e, 0x55, 0x9e, 0x57, 0x9e, 0x5a, 0x9e, 0x5b, 0x9e, 0x5c, 0x9e, 0x5e, 0x9e, 0x63, 0x9e, 0x66, 0x9e, 0x67, 0x9e, 0x68, 0x9e, 0x69, 0x9e, 0x6a, 0x9e, 0x6b, 0x9e, 0x6c, 0x9e, 0x71, 0x9e, 0x6d, 0x9e, 0x73, 0x9e, 0x92, 0x75, 0x94, 0x75, 0x96, 0x75, 0xa0, 0x75, 0x9d, 0x75, 0xac, 0x75, 0xa3, 0x75, 0xb3, 0x75, 0xb4, 0x75, 0xb8, 0x75, 0xc4, 0x75, 0xb1, 0x75, 0xb0, 0x75, 0xc3, 0x75, 0xc2, 0x75, 0xd6, 0x75, 0xcd, 0x75, 0xe3, 0x75, 0xe8, 0x75, 0xe6, 0x75, 0xe4, 0x75, 0xeb, 0x75, 0xe7, 0x75, 0x03, 0x76, 0xf1, 0x75, 0xfc, 0x75, 0xff, 0x75, 0x10, 0x76, 0x00, 0x76, 0x05, 0x76, 0x0c, 0x76, 0x17, 0x76, 0x0a, 0x76, 0x25, 0x76, 0x18, 0x76, 0x15, 0x76, 0x19, 0x76, 0x1b, 0x76, 0x3c, 0x76, 0x22, 0x76, 0x20, 0x76, 0x40, 0x76, 0x2d, 0x76, 0x30, 0x76, 0x3f, 0x76, 0x35, 0x76, 0x43, 0x76, 0x3e, 0x76, 0x33, 0x76, 0x4d, 0x76, 0x5e, 0x76, 0x54, 0x76, 0x5c, 0x76, 0x56, 0x76, 0x6b, 0x76, 0x6f, 0x76, 0xca, 0x7f, 0xe6, 0x7a, 0x78, 0x7a, 0x79, 0x7a, 0x80, 0x7a, 0x86, 0x7a, 0x88, 0x7a, 0x95, 0x7a, 0xa6, 0x7a, 0xa0, 0x7a, 0xac, 0x7a, 0xa8, 0x7a, 0xad, 0x7a, 0xb3, 0x7a, 0x64, 0x88, 0x69, 0x88, 0x72, 0x88, 0x7d, 0x88, 0x7f, 0x88, 0x82, 0x88, 0xa2, 0x88, 0xc6, 0x88, 0xb7, 0x88, 0xbc, 0x88, 0xc9, 0x88, 0xe2, 0x88, 0xce, 0x88, 0xe3, 0x88, 0xe5, 0x88, 0xf1, 0x88, 0x1a, 0x89, 0xfc, 0x88, 0xe8, 0x88, 0xfe, 0x88, 0xf0, 0x88, 0x21, 0x89, 0x19, 0x89, 0x13, 0x89, 0x1b, 0x89, 0x0a, 0x89, 0x34, 0x89, 0x2b, 0x89, 0x36, 0x89, 0x41, 0x89, 0x66, 0x89, 0x7b, 0x89, 0x8b, 0x75, 0xe5, 0x80, 0xb2, 0x76, 0xb4, 0x76, 0xdc, 0x77, 0x12, 0x80, 0x14, 0x80, 0x16, 0x80, 0x1c, 0x80, 0x20, 0x80, 0x22, 0x80, 0x25, 0x80, 0x26, 0x80, 0x27, 0x80, 0x29, 0x80, 0x28, 0x80, 0x31, 0x80, 0x0b, 0x80, 0x35, 0x80, 0x43, 0x80, 0x46, 0x80, 0x4d, 0x80, 0x52, 0x80, 0x69, 0x80, 0x71, 0x80, 0x83, 0x89, 0x78, 0x98, 0x80, 0x98, 0x83, 0x98, 0x89, 0x98, 0x8c, 0x98, 0x8d, 0x98, 0x8f, 0x98, 0x94, 0x98, 0x9a, 0x98, 0x9b, 0x98, 0x9e, 0x98, 0x9f, 0x98, 0xa1, 0x98, 0xa2, 0x98, 0xa5, 0x98, 0xa6, 0x98, 0x4d, 0x86, 0x54, 0x86, 0x6c, 0x86, 0x6e, 0x86, 0x7f, 0x86, 0x7a, 0x86, 0x7c, 0x86, 0x7b, 0x86, 0xa8, 0x86, 0x8d, 0x86, 0x8b, 0x86, 0xac, 0x86, 0x9d, 0x86, 0xa7, 0x86, 0xa3, 0x86, 0xaa, 0x86, 0x93, 0x86, 0xa9, 0x86, 0xb6, 0x86, 0xc4, 0x86, 0xb5, 0x86, 0xce, 0x86, 0xb0, 0x86, 0xba, 0x86, 0xb1, 0x86, 0xaf, 0x86, 0xc9, 0x86, 0xcf, 0x86, 0xb4, 0x86, 0xe9, 0x86, 0xf1, 0x86, 0xf2, 0x86, 0xed, 0x86, 0xf3, 0x86, 0xd0, 0x86, 0x13, 0x87, 0xde, 0x86, 0xf4, 0x86, 0xdf, 0x86, 0xd8, 0x86, 0xd1, 0x86, 0x03, 0x87, 0x07, 0x87, 0xf8, 0x86, 0x08, 0x87, 0x0a, 0x87, 0x0d, 0x87, 0x09, 0x87, 0x23, 0x87, 0x3b, 0x87, 0x1e, 0x87, 0x25, 0x87, 0x2e, 0x87, 0x1a, 0x87, 0x3e, 0x87, 0x48, 0x87, 0x34, 0x87, 0x31, 0x87, 0x29, 0x87, 0x37, 0x87, 0x3f, 0x87, 0x82, 0x87, 0x22, 0x87, 0x7d, 0x87, 0x7e, 0x87, 0x7b, 0x87, 0x60, 0x87, 0x70, 0x87, 0x4c, 0x87, 0x6e, 0x87, 0x8b, 0x87, 0x53, 0x87, 0x63, 0x87, 0x7c, 0x87, 0x64, 0x87, 0x59, 0x87, 0x65, 0x87, 0x93, 0x87, 0xaf, 0x87, 0xa8, 0x87, 0xd2, 0x87, 0xc6, 0x87, 0x88, 0x87, 0x85, 0x87, 0xad, 0x87, 0x97, 0x87, 0x83, 0x87, 0xab, 0x87, 0xe5, 0x87, 0xac, 0x87, 0xb5, 0x87, 0xb3, 0x87, 0xcb, 0x87, 0xd3, 0x87, 0xbd, 0x87, 0xd1, 0x87, 0xc0, 0x87, 0xca, 0x87, 0xdb, 0x87, 0xea, 0x87, 0xe0, 0x87, 0xee, 0x87, 0x16, 0x88, 0x13, 0x88, 0xfe, 0x87, 0x0a, 0x88, 0x1b, 0x88, 0x21, 0x88, 0x39, 0x88, 0x3c, 0x88, 0x36, 0x7f, 0x42, 0x7f, 0x44, 0x7f, 0x45, 0x7f, 0x10, 0x82, 0xfa, 0x7a, 0xfd, 0x7a, 0x08, 0x7b, 0x03, 0x7b, 0x04, 0x7b, 0x15, 0x7b, 0x0a, 0x7b, 0x2b, 0x7b, 0x0f, 0x7b, 0x47, 0x7b, 0x38, 0x7b, 0x2a, 0x7b, 0x19, 0x7b, 0x2e, 0x7b, 0x31, 0x7b, 0x20, 0x7b, 0x25, 0x7b, 0x24, 0x7b, 0x33, 0x7b, 0x3e, 0x7b, 0x1e, 0x7b, 0x58, 0x7b, 0x5a, 0x7b, 0x45, 0x7b, 0x75, 0x7b, 0x4c, 0x7b, 0x5d, 0x7b, 0x60, 0x7b, 0x6e, 0x7b, 0x7b, 0x7b, 0x62, 0x7b, 0x72, 0x7b, 0x71, 0x7b, 0x90, 0x7b, 0xa6, 0x7b, 0xa7, 0x7b, 0xb8, 0x7b, 0xac, 0x7b, 0x9d, 0x7b, 0xa8, 0x7b, 0x85, 0x7b, 0xaa, 0x7b, 0x9c, 0x7b, 0xa2, 0x7b, 0xab, 0x7b, 0xb4, 0x7b, 0xd1, 0x7b, 0xc1, 0x7b, 0xcc, 0x7b, 0xdd, 0x7b, 0xda, 0x7b, 0xe5, 0x7b, 0xe6, 0x7b, 0xea, 0x7b, 0x0c, 0x7c, 0xfe, 0x7b, 0xfc, 0x7b, 0x0f, 0x7c, 0x16, 0x7c, 0x0b, 0x7c, 0x1f, 0x7c, 0x2a, 0x7c, 0x26, 0x7c, 0x38, 0x7c, 0x41, 0x7c, 0x40, 0x7c, 0xfe, 0x81, 0x01, 0x82, 0x02, 0x82, 0x04, 0x82, 0xec, 0x81, 0x44, 0x88, 0x21, 0x82, 0x22, 0x82, 0x23, 0x82, 0x2d, 0x82, 0x2f, 0x82, 0x28, 0x82, 0x2b, 0x82, 0x38, 0x82, 0x3b, 0x82, 0x33, 0x82, 0x34, 0x82, 0x3e, 0x82, 0x44, 0x82, 0x49, 0x82, 0x4b, 0x82, 0x4f, 0x82, 0x5a, 0x82, 0x5f, 0x82, 0x68, 0x82, 0x7e, 0x88, 0x85, 0x88, 0x88, 0x88, 0xd8, 0x88, 0xdf, 0x88, 0x5e, 0x89, 0x9d, 0x7f, 0x9f, 0x7f, 0xa7, 0x7f, 0xaf, 0x7f, 0xb0, 0x7f, 0xb2, 0x7f, 0x7c, 0x7c, 0x49, 0x65, 0x91, 0x7c, 0x9d, 0x7c, 0x9c, 0x7c, 0x9e, 0x7c, 0xa2, 0x7c, 0xb2, 0x7c, 0xbc, 0x7c, 0xbd, 0x7c, 0xc1, 0x7c, 0xc7, 0x7c, 0xcc, 0x7c, 0xcd, 0x7c, 0xc8, 0x7c, 0xc5, 0x7c, 0xd7, 0x7c, 0xe8, 0x7c, 0x6e, 0x82, 0xa8, 0x66, 0xbf, 0x7f, 0xce, 0x7f, 0xd5, 0x7f, 0xe5, 0x7f, 0xe1, 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xee, 0x7f, 0xf3, 0x7f, 0xf8, 0x7c, 0x77, 0x7d, 0xa6, 0x7d, 0xae, 0x7d, 0x47, 0x7e, 0x9b, 0x7e, 0xb8, 0x9e, 0xb4, 0x9e, 0x73, 0x8d, 0x84, 0x8d, 0x94, 0x8d, 0x91, 0x8d, 0xb1, 0x8d, 0x67, 0x8d, 0x6d, 0x8d, 0x47, 0x8c, 0x49, 0x8c, 0x4a, 0x91, 0x50, 0x91, 0x4e, 0x91, 0x4f, 0x91, 0x64, 0x91, 0x62, 0x91, 0x61, 0x91, 0x70, 0x91, 0x69, 0x91, 0x6f, 0x91, 0x7d, 0x91, 0x7e, 0x91, 0x72, 0x91, 0x74, 0x91, 0x79, 0x91, 0x8c, 0x91, 0x85, 0x91, 0x90, 0x91, 0x8d, 0x91, 0x91, 0x91, 0xa2, 0x91, 0xa3, 0x91, 0xaa, 0x91, 0xad, 0x91, 0xae, 0x91, 0xaf, 0x91, 0xb5, 0x91, 0xb4, 0x91, 0xba, 0x91, 0x55, 0x8c, 0x7e, 0x9e, 0xb8, 0x8d, 0xeb, 0x8d, 0x05, 0x8e, 0x59, 0x8e, 0x69, 0x8e, 0xb5, 0x8d, 0xbf, 0x8d, 0xbc, 0x8d, 0xba, 0x8d, 0xc4, 0x8d, 0xd6, 0x8d, 0xd7, 0x8d, 0xda, 0x8d, 0xde, 0x8d, 0xce, 0x8d, 0xcf, 0x8d, 0xdb, 0x8d, 0xc6, 0x8d, 0xec, 0x8d, 0xf7, 0x8d, 0xf8, 0x8d, 0xe3, 0x8d, 0xf9, 0x8d, 0xfb, 0x8d, 0xe4, 0x8d, 0x09, 0x8e, 0xfd, 0x8d, 0x14, 0x8e, 0x1d, 0x8e, 0x1f, 0x8e, 0x2c, 0x8e, 0x2e, 0x8e, 0x23, 0x8e, 0x2f, 0x8e, 0x3a, 0x8e, 0x40, 0x8e, 0x39, 0x8e, 0x35, 0x8e, 0x3d, 0x8e, 0x31, 0x8e, 0x49, 0x8e, 0x41, 0x8e, 0x42, 0x8e, 0x51, 0x8e, 0x52, 0x8e, 0x4a, 0x8e, 0x70, 0x8e, 0x76, 0x8e, 0x7c, 0x8e, 0x6f, 0x8e, 0x74, 0x8e, 0x85, 0x8e, 0x8f, 0x8e, 0x94, 0x8e, 0x90, 0x8e, 0x9c, 0x8e, 0x9e, 0x8e, 0x78, 0x8c, 0x82, 0x8c, 0x8a, 0x8c, 0x85, 0x8c, 0x98, 0x8c, 0x94, 0x8c, 0x9b, 0x65, 0xd6, 0x89, 0xde, 0x89, 0xda, 0x89, 0xdc, 0x89, 0xe5, 0x89, 0xeb, 0x89, 0xef, 0x89, 0x3e, 0x8a, 0x26, 0x8b, 0x53, 0x97, 0xe9, 0x96, 0xf3, 0x96, 0xef, 0x96, 0x06, 0x97, 0x01, 0x97, 0x08, 0x97, 0x0f, 0x97, 0x0e, 0x97, 0x2a, 0x97, 0x2d, 0x97, 0x30, 0x97, 0x3e, 0x97, 0x80, 0x9f, 0x83, 0x9f, 0x85, 0x9f, 0x86, 0x9f, 0x87, 0x9f, 0x88, 0x9f, 0x89, 0x9f, 0x8a, 0x9f, 0x8c, 0x9f, 0xfe, 0x9e, 0x0b, 0x9f, 0x0d, 0x9f, 0xb9, 0x96, 0xbc, 0x96, 0xbd, 0x96, 0xce, 0x96, 0xd2, 0x96, 0xbf, 0x77, 0xe0, 0x96, 0x8e, 0x92, 0xae, 0x92, 0xc8, 0x92, 0x3e, 0x93, 0x6a, 0x93, 0xca, 0x93, 0x8f, 0x93, 0x3e, 0x94, 0x6b, 0x94, 0x7f, 0x9c, 0x82, 0x9c, 0x85, 0x9c, 0x86, 0x9c, 0x87, 0x9c, 0x88, 0x9c, 0x23, 0x7a, 0x8b, 0x9c, 0x8e, 0x9c, 0x90, 0x9c, 0x91, 0x9c, 0x92, 0x9c, 0x94, 0x9c, 0x95, 0x9c, 0x9a, 0x9c, 0x9b, 0x9c, 0x9e, 0x9c, 0x9f, 0x9c, 0xa0, 0x9c, 0xa1, 0x9c, 0xa2, 0x9c, 0xa3, 0x9c, 0xa5, 0x9c, 0xa6, 0x9c, 0xa7, 0x9c, 0xa8, 0x9c, 0xa9, 0x9c, 0xab, 0x9c, 0xad, 0x9c, 0xae, 0x9c, 0xb0, 0x9c, 0xb1, 0x9c, 0xb2, 0x9c, 0xb3, 0x9c, 0xb4, 0x9c, 0xb5, 0x9c, 0xb6, 0x9c, 0xb7, 0x9c, 0xba, 0x9c, 0xbb, 0x9c, 0xbc, 0x9c, 0xbd, 0x9c, 0xc4, 0x9c, 0xc5, 0x9c, 0xc6, 0x9c, 0xc7, 0x9c, 0xca, 0x9c, 0xcb, 0x9c, 0xcc, 0x9c, 0xcd, 0x9c, 0xce, 0x9c, 0xcf, 0x9c, 0xd0, 0x9c, 0xd3, 0x9c, 0xd4, 0x9c, 0xd5, 0x9c, 0xd7, 0x9c, 0xd8, 0x9c, 0xd9, 0x9c, 0xdc, 0x9c, 0xdd, 0x9c, 0xdf, 0x9c, 0xe2, 0x9c, 0x7c, 0x97, 0x85, 0x97, 0x91, 0x97, 0x92, 0x97, 0x94, 0x97, 0xaf, 0x97, 0xab, 0x97, 0xa3, 0x97, 0xb2, 0x97, 0xb4, 0x97, 0xb1, 0x9a, 0xb0, 0x9a, 0xb7, 0x9a, 0x58, 0x9e, 0xb6, 0x9a, 0xba, 0x9a, 0xbc, 0x9a, 0xc1, 0x9a, 0xc0, 0x9a, 0xc5, 0x9a, 0xc2, 0x9a, 0xcb, 0x9a, 0xcc, 0x9a, 0xd1, 0x9a, 0x45, 0x9b, 0x43, 0x9b, 0x47, 0x9b, 0x49, 0x9b, 0x48, 0x9b, 0x4d, 0x9b, 0x51, 0x9b, 0xe8, 0x98, 0x0d, 0x99, 0x2e, 0x99, 0x55, 0x99, 0x54, 0x99, 0xdf, 0x9a, 0xe1, 0x9a, 0xe6, 0x9a, 0xef, 0x9a, 0xeb, 0x9a, 0xfb, 0x9a, 0xed, 0x9a, 0xf9, 0x9a, 0x08, 0x9b, 0x0f, 0x9b, 0x13, 0x9b, 0x1f, 0x9b, 0x23, 0x9b, 0xbd, 0x9e, 0xbe, 0x9e, 0x3b, 0x7e, 0x82, 0x9e, 0x87, 0x9e, 0x88, 0x9e, 0x8b, 0x9e, 0x92, 0x9e, 0xd6, 0x93, 0x9d, 0x9e, 0x9f, 0x9e, 0xdb, 0x9e, 0xdc, 0x9e, 0xdd, 0x9e, 0xe0, 0x9e, 0xdf, 0x9e, 0xe2, 0x9e, 0xe9, 0x9e, 0xe7, 0x9e, 0xe5, 0x9e, 0xea, 0x9e, 0xef, 0x9e, 0x22, 0x9f, 0x2c, 0x9f, 0x2f, 0x9f, 0x39, 0x9f, 0x37, 0x9f, 0x3d, 0x9f, 0x3e, 0x9f, 0x44, 0x9f};
	// clang-format on

	//编码转换，从GB2312转成unicode
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: const byte *GBCodeToUnicode(byte *gbCode)
	public static byte* GBCodeToUnicode( byte* gbCode)
	{
		uint i = 0;

		if ((*(gbCode + 1) >= 0xa1) && (*(gbCode + 1) <= 0xfe))
		{
			if ((*gbCode >= 0xa1) && (*gbCode <= 0xa9))
			{
				i = (uint)(((*gbCode - 0xa1) * 94 + (*(gbCode + 1) - 0xa1)) * 2);
			}
			else if ((*gbCode >= 0xb0) && (*gbCode <= 0xf7))
			{
				i = (uint)(((*gbCode - 0xb0 + 9) * 94 + (*(gbCode + 1) - 0xa1)) * 2);
			}
			if (i < sizeof(byte))
			{
				return (byte*)getBytePtr ( gb2uTable,(int)i);
			}
		}
		return null;
	}



	// http://wiki.libsdl.org/Tutorials
	// http://lazyfoo.net/tutorials/SDL/index.php

	internal static SDL_TimerID timeId = 0;
	internal static SDL_Window window;
	internal static uc_engine uc;
	public delegate void eventFuncDelegate(int code, int p1, int p2);
	internal static eventFuncDelegate eventFunc;

	public static void guiDrawBitmap( ushort* bmp, int x, int y, int w, int h)
	{
		SDL_Surface surface = SDL_GetWindowSurface(window);
		if (SDL_MUSTLOCK(surface))
		{
			if (SDL_LockSurface(surface) != 0)
			{
				Console.Write("SDL_LockSurface err\n");
			}
		}
		for (int j = 0; j < h; j++)
		{
			for (int i = 0; i < w; i++)
			{
				int xx = x + i;
				int yy = y + j;
				if (xx < 0 || yy < 0 || xx >= DefineConstants.SCREEN_WIDTH || yy >= DefineConstants.SCREEN_HEIGHT)
				{
					continue;
				}
				ushort color = *(bmp + (xx + yy * DefineConstants.SCREEN_WIDTH));
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: uint *p = (uint *)(((byte *)surface->pixels) + surface->pitch * yy) + xx;
				uint* p = (uint*)(((byte*)surface.pixels) + surface.pitch * yy) + xx;
				p = SDL_MapRGB(surface.format, ((((uint)color >> 11) << 3) & 0xff), ((((uint)color >> 5) << 2) & 0xff), (((uint)color << 3) & 0xff));
			}
		}
		if (SDL_MUSTLOCK(surface))
		{
			SDL_UnlockSurface(surface);
		}
		if (SDL_UpdateWindowSurface(window) != 0)
		{
			Console.Write("SDL_UpdateWindowSurface err\n");
		}
	}

	internal static void eventFuncV1(int code, int p1, int p2)
	{
		if (uc != null)
		{
			bridge_mr_event(uc, code, p1, p2);
		}
	}

	internal static void eventFuncV2(int code, int p1, int p2)
	{
		if (uc != null)
		{
			bridge_dsm_mr_event(uc, code, p1, p2);
		}
	}

	#if __EMSCRIPTEN__
	public static EMSCRIPTEN_KEEPALIVE int c_event(int code, int p1, int p2)
	{
		if (uc != null)
		{
			return bridge_dsm_mr_event(uc, code, p1, p2);
		}
		return DefineConstants.MR_FAILED;
	}

	public static EMSCRIPTEN_KEEPALIVE void setEventEnable(int v)
	{
		int state = v != 0 ? SDL_ENABLE : SDL_DISABLE;
		SDL_EventState(SDL_TEXTINPUT, state);
		SDL_EventState(SDL_KEYDOWN, state);
		SDL_EventState(SDL_KEYUP, state);
		SDL_EventState(SDL_MOUSEMOTION, state);
		SDL_EventState(SDL_MOUSEBUTTONDOWN, state);
		SDL_EventState(SDL_MOUSEBUTTONUP, state);
	}
	#endif

	public static uint th2(uint interval, object param)
	{
		SDL_RemoveTimer(timeId);
		timeId = 0;
		bridge_dsm_mr_timer(uc);
		return 0;
	}

	public static int timerStart(ushort t)
	{
		if (timeId == null)
		{
			timeId = SDL_AddTimer(t, th2, null);
		}
		else
		{
			SDL_RemoveTimer(timeId);
			timeId = SDL_AddTimer(t, th2, null);
		}
		return DefineConstants.MR_SUCCESS;
	}

	public static int timerStop()
	{
		if (timeId != null)
		{
			SDL_RemoveTimer(timeId);
			timeId = 0;
		}
		return DefineConstants.MR_SUCCESS;
	}

	internal static int startMrp(string f)
	{
		fileLib_init();
		eventFunc = eventFuncV1;

		uc = initVmrp(f);
		if (uc == null)
		{
			Console.Write("initVmrp() fail.\n");
			return 1;
		}

		uint ret = bridge_mr_init(uc);

        return 1;

        if (ret > DefineConstants.CODE_ADDRESS)
		{
			Console.Write("bridge_mr_init:0x{0:X} try vmrp loader\n", ret);

			if (bridge_dsm_init(uc, ret) == DefineConstants.MR_SUCCESS)
			{
				eventFunc = eventFuncV2;
				Console.Write("bridge_dsm_init success\n");
				dumpREG(uc);

				string filename = "dsm_gm.mrp";
				// char *filename = "winmine.mrp";
				string extName = "start.mr";
				// char *extName = "cfunction.ext";

				uint ret2 = bridge_dsm_mr_start_dsm(uc, ref filename, ref extName, null);
				Console.Write("bridge_dsm_mr_start_dsm('{0}','{1}',NULL): 0x{2:X}\n", filename, extName, ret2);
			}
		}

		// bridge_mr_pauseApp(uc);
		// bridge_mr_resumeApp(uc);

		// mrc_exitApp() 可能由MR_EVENT_EXIT event之后自动调用
		// bridge_mr_event(uc, MR_EVENT_EXIT, 0, 0);

		// freeVmrp(uc);
		// printf("exit.\n");
		return 0;
	}

	internal static void keyEvent(short type, SDL_Keycode code)
	{
		if (code >= SDL_Keycode.SDLK_0 && code <= SDL_Keycode.SDLK_9)
		{
			int key = (int)AnonymousEnum9.MR_KEY_0 + (code - SDL_Keycode.SDLK_0);
			eventFunc(type, key, 0); // 按键 0-9
			return;
		}
		switch (code)
		{
			case SDL_Keycode.SDLK_KP_0:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_0, 0);
				break;
			case SDL_Keycode.SDLK_KP_1:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_1, 0);
				break;
			case SDL_Keycode.SDLK_KP_2:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_2, 0);
				break;
			case SDL_Keycode.SDLK_KP_3:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_3, 0);
				break;
			case SDL_Keycode.SDLK_KP_4:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_4, 0);
				break;
			case SDL_Keycode.SDLK_KP_5:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_5, 0);
				break;
			case SDL_Keycode.SDLK_KP_6:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_6, 0);
				break;
			case SDL_Keycode.SDLK_KP_7:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_7, 0);
				break;
			case SDL_Keycode.SDLK_KP_8:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_8, 0);
				break;
			case SDL_Keycode.SDLK_KP_9:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_9, 0);
				break;
			case SDL_Keycode.SDLK_KP_ENTER:
			case SDL_Keycode.SDLK_RETURN: // 回车键
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_SELECT, 0); // 确认/选择/ok
				break;
			case SDL_Keycode.SDLK_EQUALS: // 等号
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_POUND, 0); // 按键 #
				break;
			case SDL_Keycode.SDLK_MINUS: // 减号
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_STAR, 0); // 按键 *
				break;
			case SDL_Keycode.SDLK_w:
			case SDL_Keycode.SDLK_UP: // 上
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_UP, 0);
				break;
			case SDL_Keycode.SDLK_s:
			case SDL_Keycode.SDLK_DOWN: // 下
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_DOWN, 0);
				break;
			case SDL_Keycode.SDLK_a:
			case SDL_Keycode.SDLK_LEFT: // 左
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_LEFT, 0);
				break;
			case SDL_Keycode.SDLK_d:
			case SDL_Keycode.SDLK_RIGHT: // 右
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_RIGHT, 0);
				break;
			case SDL_Keycode.SDLK_q:
			case SDL_Keycode.SDLK_LEFTBRACKET: // 左中括号
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_SOFTLEFT, 0); // 左功能键
				break;
			case SDL_Keycode.SDLK_e:
			case SDL_Keycode.SDLK_RIGHTBRACKET: // 右中括号
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_SOFTRIGHT, 0); // 右功能键
				break;
			case SDL_Keycode.SDLK_TAB:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_SEND, 0); // 接听键
				break;
			case SDL_Keycode.SDLK_ESCAPE:
				eventFunc(type, (int)AnonymousEnum9.MR_KEY_POWER, 0); // 挂机键
				break;
			default:
				Console.Write("key:{0:D}\n", code);
				break;
		}
	}

	public static bool isMouseDown = false;
	public static SDL_Keycode isKeyDown = SDL_Keycode.SDLK_UNKNOWN;

	public static void loop()
	{
		SDL_Event @event = new SDL_Event();
		bool isLoop = true;

#if __EMSCRIPTEN__
#else
		if (isLoop)

	#endif
		{
	#if __EMSCRIPTEN__
			while (SDL_PollEvent(event))
	#else
			if (SDL_WaitEvent(@event))
	#endif
			{
				if (@event.type == SDL_EventType. SDL_QUIT)
				{
					isLoop = false;
					// emscripten_cancel_main_loop();
					//break;
					return;
				}
				switch (@event.type)
				{
					case SDL_EventType.SDL_KEYDOWN:
						if (isKeyDown == SDL_Keycode.SDLK_UNKNOWN)
						{
							isKeyDown = @event.key.keysym.sym;
							keyEvent((short)AnonymousEnum10.MR_KEY_PRESS,@event.key.keysym.sym);
						}
						break;
					case SDL_EventType.SDL_KEYUP:
						if (isKeyDown == @event.key.keysym.sym)
						{
							isKeyDown = SDL_Keycode.SDLK_UNKNOWN;
							keyEvent((short)AnonymousEnum10.MR_KEY_RELEASE, @event.key.keysym.sym);
						}
						break;
					case SDL_EventType.SDL_MOUSEMOTION:
						if (isMouseDown)
						{
							eventFunc((int)AnonymousEnum10.MR_MOUSE_MOVE, @event.motion.x, @event.motion.y);
						}
						break;
					case SDL_EventType.SDL_MOUSEBUTTONDOWN:
						isMouseDown = true;
						eventFunc((int)AnonymousEnum10.MR_MOUSE_DOWN, @event.motion.x, @event.motion.y);
						break;
					case SDL_EventType.SDL_MOUSEBUTTONUP:
						isMouseDown = false;
						eventFunc((int)AnonymousEnum10.MR_MOUSE_UP, @event.motion.x, @event.motion.y);
						break;
				}
			}
		}
	}

	public static int Main(int argc, string[] args)
	{
#if __x86_64__
		Console.Write("__x86_64__\n");
#elif __i386__
		Console.Write("__i386__\n");
#endif
		fixed( rb_root * roots = &root)
        {
			rootP = roots;
		}
		Console.Write("CODE_ADDRESS:0x{0:X}, CODE_SIZE:0x{1:X}\n", DefineConstants.CODE_ADDRESS, DefineConstants.CODE_SIZE);
		Console.Write("STACK_ADDRESS:0x{0:X}, STACK_SIZE:0x{1:X}\n", (DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE), DefineConstants.STACK_SIZE);
		Console.Write("BRIDGE_TABLE_ADDRESS:0x{0:X}, BRIDGE_TABLE_SIZE:0x{1:X}\n", ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE), DefineConstants.BRIDGE_TABLE_SIZE);
		Console.Write("MEMORY_MANAGER_ADDRESS:0x{0:X}, MEMORY_MANAGER_SIZE:0x{1:X}\n", (((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE), DefineConstants.MEMORY_MANAGER_SIZE);
		Console.Write("SCREEN_BUF_ADDRESS:0x{0:X}, SCREEN_BUF_SIZE:0x{1:X}\n", ((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE), (DefineConstants.SCREEN_WIDTH * DefineConstants.SCREEN_HEIGHT * 2));
		Console.Write("START_ADDRESS:0x{0:X}, STOP_ADDRESS:0x{1:X}\n", DefineConstants.CODE_ADDRESS, (((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE) + (DefineConstants.SCREEN_WIDTH * DefineConstants.SCREEN_HEIGHT * 2)));
		Console.Write("TOTAL_MEMORY:0x{0:X}({1:D})\n", ((((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE) + (DefineConstants.SCREEN_WIDTH * DefineConstants.SCREEN_HEIGHT * 2)) - DefineConstants.CODE_ADDRESS), ((((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE) + (DefineConstants.SCREEN_WIDTH * DefineConstants.SCREEN_HEIGHT * 2)) - DefineConstants.CODE_ADDRESS));

		//if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
		//{
		//	Console.Write("SDL could not initialize! SDL_Error: {0}\n", SDL_GetError());
		//	return -1;
		//}

		window = SDL_CreateWindow("vmrp", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DefineConstants.SCREEN_WIDTH, DefineConstants.SCREEN_HEIGHT, SDL_WindowFlags.SDL_WINDOW_SHOWN);
		if (window == null)
		{
			Console.Write("Window could not be created! SDL_Error: {0}\n", SDL_GetError());
			return -1;
		}

		startMrp("vmrp.mrp");

	#if __EMSCRIPTEN__
		emscripten_set_main_loop(loop, 0, 1);
	#else
		loop();
	#endif
		return 0;
	}


	public static uint LG_mem_min; // 从未分配过的长度？
	public static uint LG_mem_top; // 动态申请到达的最高内存值
	public static LG_mem_free_t LG_mem_free ;
	public static byte* LG_mem_base;
	public static uint LG_mem_len;
	public static byte* Origin_LG_mem_base;
	public static uint Origin_LG_mem_len;
	public static byte* LG_mem_end;
	public static uint LG_mem_left; // 剩余内存

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define realLGmemSize(x) (((x) + 7) & (0xfffffff8))

	public static void initMemoryManager(long baseAddress, uint len)
	{
		Console.Write("initMemoryManager: baseAddress:0x{0:X} len: 0x{1:X}\n", baseAddress, len);
		Origin_LG_mem_base = (byte*)getMrpMemPtr(baseAddress);
		Origin_LG_mem_len = len;

		LG_mem_base = (byte *)((long)(Origin_LG_mem_base+3) & (~3));
		LG_mem_len = (uint)((Origin_LG_mem_len - (LG_mem_base - Origin_LG_mem_base)) & (~3));
		//LG_mem_base = Origin_LG_mem_base;
		//LG_mem_len = Origin_LG_mem_len;
		LG_mem_end = LG_mem_base+(LG_mem_len);
		LG_mem_free.next = 0;
		LG_mem_free.len = 0;
		((LG_mem_free_t*)LG_mem_base)->next = LG_mem_len;
		((LG_mem_free_t*)LG_mem_base)->len = LG_mem_len;
		LG_mem_left = LG_mem_len;
	#if MEM_DEBUG
		LG_mem_min = LG_mem_len;
		LG_mem_top = 0;
	#endif
	}

	#if __EMSCRIPTEN__
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Statements that are interrupted by preprocessor statements are not converted by C++ to C# Converter Cracked By X-Cracker 2017:
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EMSCRIPTEN_KEEPALIVE
	#endif
	public static void printMemoryInfo()
	{
		Console.Write(".......total:{0:D}, min:{1:D}, free:{2:D}, top:{3:D}\n", LG_mem_len, LG_mem_min, LG_mem_left, LG_mem_top);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf(".......base:%p, end:%p\n", LG_mem_base, LG_mem_end);
		Console.Write(".......base:%p, end:%p\n", *LG_mem_base, LG_mem_end);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf(".......obase:%p, olen:%d\n", Origin_LG_mem_base, Origin_LG_mem_len);
		Console.Write(".......obase:%p, olen:{1:D}\n", *Origin_LG_mem_base, Origin_LG_mem_len);
	}

	public static void* my_malloc(uint len)
	{
		LG_mem_free_t* previous;
		LG_mem_free_t* nextfree;
		LG_mem_free_t* l;
		void* ret;

		len = (uint)(((len) + 7) & (0xfffffff8));
		if (len >= LG_mem_left)
		{
			Console.Write("my_malloc no memory\n");
			goto err;
		}
		if (len == 0)
		{
			Console.Write("my_malloc invalid memory request");
			goto err;
		}
		if (LG_mem_base+(LG_mem_free.next) > LG_mem_end)
		{
			Console.Write("my_malloc corrupted memory");
			goto err;
		}
		fixed (LG_mem_free_t* previouss = &LG_mem_free)
		{
			previous = previouss;
			nextfree = (LG_mem_free_t*)(LG_mem_base + (previous->next));
			while ((sbyte*)nextfree < LG_mem_end)
			{
				if (nextfree->len == len)
				{
					previous->next = nextfree->next;
					LG_mem_left -= len;
#if MEM_DEBUG
				if (LG_mem_left < LG_mem_min)
				{
					LG_mem_min = LG_mem_left;
				}
				if (LG_mem_top < previous.next)
				{
					LG_mem_top = previous.next;
				}
#endif
					ret = (void *)nextfree;
					goto end;
				}
				if (nextfree->len > len)
				{
					l = (LG_mem_free_t*)((sbyte *)nextfree + len);
					l->next = nextfree->next;
					l->len = (uint)(nextfree->len - len);
					previous->next += len;
					LG_mem_left -= len;
#if MEM_DEBUG
				if (LG_mem_left < LG_mem_min)
				{
					LG_mem_min = LG_mem_left;
				}
				if (LG_mem_top < previous.next)
				{
					LG_mem_top = previous.next;
				}
#endif
					ret = (void*)nextfree;
					goto end;
				}
				//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
				//ORIGINAL LINE: previous = nextfree;
				previous = nextfree;
				nextfree = (LG_mem_free_t*)(LG_mem_base+(nextfree->next));
			}
		}
			Console.Write("my_malloc no memory\n");
			err:
			return null;
			end:
			return ret;
		
	}

	public static void my_free(void* p, uint len)
	{
		LG_mem_free_t* free;
		LG_mem_free_t* n;
		len = (uint)(((len) + 7) & (0xfffffff8));
#if MEM_DEBUG
		if (len == 0 || p == null || (string)p < LG_mem_base || (string)p >= LG_mem_end != 0 || (string)p + len > LG_mem_end || (string)p + len <= LG_mem_base)
		{
			Console.Write("my_free invalid\n");
			Console.Write("p={0:D},l={1:D},base={2:D},LG_mem_end={3:D}\n", (int)p, len, (int)LG_mem_base, (int)LG_mem_end);
			return;
		}
#endif
		fixed (LG_mem_free_t* frees = &LG_mem_free)
		{
			free = frees;
			n = (LG_mem_free_t*)(LG_mem_base + (free->next));
			while (((sbyte*)n < LG_mem_end) && ((void*)n < p))
			{
				//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
				//ORIGINAL LINE: free = n;
				free = n;
				n = (LG_mem_free_t*)(LG_mem_base+(n->next));
			}
#if MEM_DEBUG
		if (p == (object)free || p == (object)n)
		{
			Console.Write("my_free:already free\n");
			return;
		}
#endif
			if ((free != frees) && ((sbyte*)free + free->len == p))
			{
				free->len += len;
			}
			else
			{
				free->next = (uint)((byte*)p - LG_mem_base);
				free = (LG_mem_free_t*)p;
				free->next = (uint)((byte*)n - LG_mem_base);
				free->len = len;
			}
			if (((sbyte *)n < LG_mem_end) && ((sbyte*)p + len == (sbyte*)n))
			{
				free->next = n->next;
				free->len += n->len;
			}
		}
		LG_mem_left += len;
	}

	public static void* my_realloc(void* p, uint oldlen, uint len)
	{
		uint minsize = (oldlen > len) ? len : oldlen;
		void* newblock;
		if (p == null)
		{
			return my_malloc(len);
		}
		if (len == 0)
		{
			my_free(p, oldlen);
			return null;
		}
		newblock = my_malloc(len);
		if (newblock == null)
		{
			return newblock;
		}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memmove' has no equivalent in C#:
		memmove(newblock, p, minsize);
		my_free(p, oldlen);
		return newblock;
	}

#if __EMSCRIPTEN__
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Statements that are interrupted by preprocessor statements are not converted by C++ to C# Converter Cracked By X-Cracker 2017:
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EMSCRIPTEN_KEEPALIVE
#endif
	public static void* my_mallocExt(int len)
    {
		return my_mallocExt((uint)len);
	}

	public static void* my_mallocExt(uint len)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: uint *p;
		uint* p;
		if (len == 0)
		{
			return null;
		}
		p = (uint*)my_malloc(len + sizeof(uint));
		if (p != null)
		{
			*p = len;
			return (void*)(p + 1);
		}
		return p;
	}

	public static uint* my_mallocExt0(uint len)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
        uint *p = (uint*)my_mallocExt(len);
		
		if (p != null)
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memset' has no equivalent in C#:
			memset(p, 0, len);
			return p;
		}
		return p;
	}

	#if __EMSCRIPTEN__
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Statements that are interrupted by preprocessor statements are not converted by C++ to C# Converter Cracked By X-Cracker 2017:
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EMSCRIPTEN_KEEPALIVE
	#endif
	public static void my_freeExt(void* p)
	{
		if (p != null)
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: uint *t = (uint *)p - 1;
			uint* t = (uint*)p - 1;
			my_free(t, *t + sizeof(uint));
		}
	}

	public static void* my_reallocExt(void* p, uint newLen)
	{
		if (p == null)
		{
			return my_mallocExt(newLen);
		}
		else if (newLen == 0)
		{
			my_freeExt(p);
			return null;
		}
		else
		{
			uint oldlen = (uint)p - 1 + sizeof(uint);
			uint minsize = (oldlen < newLen) ? oldlen : newLen;
			void* newblock = my_mallocExt(newLen);
			if (newblock == null)
			{
				return newblock;
			}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memmove' has no equivalent in C#:
			memmove(newblock, p, minsize);
			my_freeExt(p);
			return newblock;
		}
	}


	/*
	   MR_SUCCESS 成功
	   MR_FAILED 失败
	   MR_WAITING 使用异步方式进行连接，应用需要轮询该socket的状态以获知连接状况 
	
	   IP地址,如果一个主机的IP地址为218.18.95.203，则值为218<<24 + 18<<16 + 95<<8 + 203= 0xda125fcb
	*/
	public static int my_connect(int s, int ip, ushort port, int type)
	{
	#if NETWORK
		sockaddr_in clientService = new sockaddr_in();
		clientService.sin_family = AF_INET;
		clientService.sin_port = htons(port);

		clientService.sin_addr.s_addr = htonl(ip); //inet_addr("127.0.0.1");
		Console.Write("my_connect({0})\n", inet_ntoa(clientService.sin_addr));

		if (ip == 0x0A0000AC)
		{ // 10.0.0.172
			return DefineConstants.MR_SUCCESS;
		}

		if (connect((SOCKET)s, (SOCKADDR) clientService, sizeof(sockaddr_in)) != 0)
		{
			Console.Write("my_connect({0:D}) fail\n", ip);
			return DefineConstants.MR_FAILED;
		}
		Console.Write("my_connect({0:D}) suc\n", ip);
		return DefineConstants.MR_SUCCESS;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	/*
	 >=0 返回的Socket句柄 
	   MR_FAILED 失败 
	*/
	public static int my_socket(int type, int protocol)
	{
	#if NETWORK
		type = (type == (int)AnonymousEnum3.MR_SOCK_STREAM) ? SOCK_STREAM : SOCK_DGRAM;
		protocol = (protocol == (int)AnonymousEnum4.MR_IPPROTO_TCP) ? IPPROTO_TCP : IPPROTO_UDP;
		SOCKET sock = socket(AF_INET, type, protocol);
		if (sock == INVALID_SOCKET)
		{
			Console.Write("my_socket() fail\n");
			return DefineConstants.MR_FAILED;
		}
		Console.Write("my_socket(): {0:D}\n", (int)sock);
		return (int)sock;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	public static int my_closeSocket(int s)
	{
	#if NETWORK
		if (shutdown((SOCKET)s, SD_BOTH) != 0)
		{
			return DefineConstants.MR_FAILED;
		}
		if (closesocket((SOCKET)s) != 0)
		{
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	public static int my_closeNetwork()
	{
	#if NETWORK
		WSACleanup();
		return DefineConstants.MR_SUCCESS;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	/*  
	   MR_SUCCESS 同步模式，初始化成功，不再调用cb
	   MR_FAILED （立即感知的）失败，不再调用cb
	   MR_WAITING 使用回调函数通知引擎初始化结果 
	*/
	public static int my_initNetwork(MR_INIT_NETWORK_CB cb, string mode)
	{
	#if NETWORK
		WSADATA wsaData = new WSADATA();
		int iResult = WSAStartup(MAKEWORD(2, 2), wsaData);
		if (iResult != 0)
		{
			Console.Write("WSAStartup failed: {0:D}\n", iResult);
			return DefineConstants.MR_FAILED;
		}
		if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
		{
			Console.Write("Could not find a usable version of Winsock.dll\n");
			my_closeNetwork();
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}
	/*
	   MR_FAILED （立即感知的）失败，不再调用cb
	   MR_WAITING 使用回调函数通知引擎获取IP的结果
	   其他值 同步模式，立即返回的IP地址，不再调用cb 
	*/
	public static int my_getHostByName(sbyte * name, MR_GET_HOST_CB cb)
	{
	#if NETWORK
		Console.Write("my_getHostByName({0})\n", name);
		hostent remoteHost = gethostbyname(name);
		if (remoteHost != null)
		{
			if (remoteHost.h_addrtype == AF_INET)
			{
				if (remoteHost.h_addr_list[0] != null)
				{
					in_addr addr = new in_addr();
					addr.s_addr = (u_long)remoteHost.h_addr_list[0];
					// printf("%d\n", addr.S_un.S_addr);
					Console.Write("{0}\n", inet_ntoa(addr));
					return ntohl(addr.S_un.S_addr);
				}
			}
		}
		return DefineConstants.MR_FAILED;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	/*
	   >=0 实际发送的数据字节个数
	   MR_FAILED Socket已经被关闭或遇到了无法修复的错误。 
	*/
	public static int my_send(int s, sbyte* buf, int len)
	{
	#if NETWORK
		int ret = send((SOCKET)s, buf, len, 0);
		if (ret == SOCKET_ERROR)
		{
			return DefineConstants.MR_FAILED;
		}
		return ret;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	/*
	   >=0的整数 实际接收的数据字节个数
	   MR_FAILED Socket已经被关闭或遇到了无法修复的错误。 
	*/
	public static int my_recv(int s, sbyte* buf, int len)
	{
	#if NETWORK
		int ret = recv((SOCKET)s, buf, len, 0);
		if (ret == SOCKET_ERROR)
		{
			return DefineConstants.MR_FAILED;
		}
		return ret;
	#else
		return DefineConstants.MR_FAILED;
	#endif
	}

	public static int test()
	{
	#if NETWORK
		my_initNetwork(null, "cmnet");

		// gcc -Wall a.c -m32 -lws2_32 && ./a.exe
		int ip = my_getHostByName("qq.com", null);
		Console.Write("ip:0x{0:X}\n", ip);

		int sh = my_socket(AnonymousEnum3.MR_SOCK_STREAM, AnonymousEnum4.MR_IPPROTO_TCP);
		Console.Write("sh:0x{0:X}\n", sh);

		int ret = my_connect(sh, ip, 80, AnonymousEnum5.MR_SOCKET_NONBLOCK);
		Console.Write("ret:{0:D}\n", ret);

		string sendData = "GET / HTTP/1.1\r\nHost: qq.com\r\nAccept: */*\r\nConnection: close\r\n\r\n";
		ret = my_send(sh, sendData, sendData.Length);
		Console.Write("len:{0:D}, ret:{1:D}\n", sendData.Length, ret);

		do
		{
			string buf = new string(new char[1024 * 1024]);
			ret = my_recv(sh, ref buf, sizeof(sbyte));
			if (ret > 0)
			{
				buf = buf.Substring(0, ret);
				Console.Write("Bytes received: {0:D}, {1}\n", ret, buf);
			}
			else if (ret == 0)
			{
				Console.Write("Connection closed\n");
			}
			else
			{
				Console.Write("recv failed with error: {0:D}\n", WSAGetLastError());
			}

		} while (ret > 0);

		my_closeNetwork();
	#endif
		return 0;
	}


	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_color(r) ((r)->rb_parent_color & 1)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_is_red(r) (!rb_color(r))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_is_black(r) rb_color(r)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)

	internal static void rb_set_parent(rb_node* rb, rb_node* p)
	{
		rb->rb_parent_color = (rb->rb_parent_color & 3) | (long)p;
	}
	internal static void rb_set_color(rb_node* rb, long color)
	{
		rb->rb_parent_color =( (rb->rb_parent_color & ~1) | color);
	}

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_ROOT (struct rb_root) { NULL, }
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_entry(ptr, type, member) container_of(ptr, type, member)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );})

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_EMPTY_NODE(node) (rb_parent(node) == node)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_CLEAR_NODE(node) (rb_set_parent(node, node))

	public static void rb_insert_color(rb_node* node, rb_root* root)
	{
		rb_node* parent;
		rb_node* gparent;

		while ((parent = ((rb_node*)(node->rb_parent_color & ~3))) != null && ((parent->rb_parent_color & 1))==0)
		{
			gparent = ((rb_node*)((parent)->rb_parent_color & ~3));

			if (parent == gparent->rb_left)
			{
				{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'register' variable declarations are not supported in C#:
//ORIGINAL LINE: register struct rb_node *uncle = gparent->rb_right;
					rb_node* uncle = gparent->rb_right;
					if (uncle != null && (((uncle)->rb_parent_color & 1))==0)
					{
						do
						{
							(uncle)->rb_parent_color |= 1;
						} while (0 != 0);
						do
						{
							(parent)->rb_parent_color |= 1;
						} while (0 != 0);
						do
						{
							(gparent)->rb_parent_color = ((gparent)->rb_parent_color & ~1);
							
						} while (0 != 0);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = gparent;
						node = gparent;
						continue;
					}
			}

				if (parent->rb_right == node)
				{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'register' variable declarations are not supported in C#:
//ORIGINAL LINE: register struct rb_node *tmp;
					rb_node* tmp;
					__rb_rotate_left(parent, root);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: tmp = parent;
					tmp = parent;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent = node;
					parent = node;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = tmp;
					node = tmp;
				}

				do
				{
					(parent)->rb_parent_color |= 1;
				} while (0 != 0);
				do
				{
					(gparent)->rb_parent_color = ((gparent)->rb_parent_color & ~1);
				} while (0 != 0);
				__rb_rotate_right(gparent, root);
			}
			else
			{
				{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'register' variable declarations are not supported in C#:
//ORIGINAL LINE: register struct rb_node *uncle = gparent->rb_left;
					rb_node* uncle = gparent->rb_left;
					if (uncle != null && (((uncle)->rb_parent_color & 1))==0)
					{
						do
						{
							(uncle)->rb_parent_color |= 1;
						} while (0 != 0);
						do
						{
							(parent)->rb_parent_color |= 1;
						} while (0 != 0);
						do
						{
							(gparent)->rb_parent_color = ((gparent)->rb_parent_color & ~1);
						} while (0 != 0);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = gparent;
						node = gparent;
						continue;
					}
			}

				if (parent->rb_left == node)
				{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'register' variable declarations are not supported in C#:
//ORIGINAL LINE: register struct rb_node *tmp;
					rb_node* tmp;
					__rb_rotate_right(parent, root);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: tmp = parent;
					tmp = parent;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent = node;
					parent = node;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = tmp;
					node = tmp;
				}

				do
				{
					(parent)->rb_parent_color |= 1;
				} while (0 != 0);
				do
				{
					(gparent)->rb_parent_color = ((gparent)->rb_parent_color & ~1);
				} while (0 != 0);
				__rb_rotate_left(gparent, root);
			}
		}

		do
		{
			(root->rb_node)->rb_parent_color |= 1;
		} while (0 != 0);
	}
	public static void rb_erase(rb_node* node, rb_root* root)
	{
		rb_node* child;
		rb_node* parent;
		int color;

		if (node->rb_left == null)
		{
			child = node->rb_right;
		}
		else if (node->rb_right == null)
		{
			child = node->rb_left;
		}
		else
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: struct rb_node *old = node, *left;
			rb_node* old = node;
			rb_node* left;

			node = node->rb_right;
			while ((left = node->rb_left) != null)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = left;
				node = left;
			}

			if (((rb_node*)((old)->rb_parent_color & ~3)) != null)
			{
				if (((rb_node*)((old)->rb_parent_color & ~3))->rb_left == old)
				{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: ((struct rb_node *)((old)->rb_parent_color & ~3))->rb_left = node;
					((rb_node*)((old)->rb_parent_color & ~3))->rb_left = node;
				}
				else
				{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: ((struct rb_node *)((old)->rb_parent_color & ~3))->rb_right = node;
					((rb_node*)((old)->rb_parent_color & ~3))->rb_right = node;
				}
			}
			else
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: root->rb_node = node;
				root->rb_node = node;
			}

			child = node->rb_right;
			parent = ((rb_node*)((node)->rb_parent_color & ~3));
			color = (int)((node)->rb_parent_color & 1);

			if (parent == old)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent = node;
				parent = node;
			}
			else
			{
				if (child != null)
				{
					rb_set_parent(child, parent);
				}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_left = child;
				parent->rb_left = child;

				node->rb_right = old->rb_right;
				rb_set_parent(old->rb_right, node);
			}

			node->rb_parent_color = old->rb_parent_color;
			node->rb_left = old->rb_left;
			rb_set_parent(old->rb_left, node);

			goto color;
		}

		parent = ((rb_node*)((node)->rb_parent_color & ~3));
		color = (int)((node)->rb_parent_color & 1);

		if (child != null)
		{
			rb_set_parent(child, parent);
		}
		if (parent != null)
		{
			if (parent->rb_left == node)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_left = child;
				parent->rb_left = child;
			}
			else
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_right = child;
				parent->rb_right = child;
			}
		}
		else
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: root->rb_node = child;
			root->rb_node = child;
		}

	 color:
		if (color == rb_node.RB_BLACK)
		{
			__rb_erase_color(child, parent, root);
		}
	}

	public delegate void rb_augment_f(rb_node* node, object data);

/*
 * after inserting @node into the tree, update the tree to account for
 * both the new entry and any damage done by rebalance
 */

	public static void rb_augment_insert(rb_node* node, rb_augment_f func, object data)
	{
		if (node->rb_left != null)
		{
			node = node->rb_left;
		}
		else if (node->rb_right!=null)
		{
			node = node->rb_right;
		}

		rb_augment_path(node, func, data);
	}

/*
 * before removing the node, find the deepest node on the rebalance path
 * that will still be there after @node gets removed
 */
	public static rb_node* rb_augment_erase_begin(rb_node* node)
	{
		rb_node* deepest;

		if (node->rb_right == null && node->rb_left == null)
		{
			deepest = ((rb_node*)((node)->rb_parent_color & ~3));
		}
		else if (node->rb_right == null)
		{
			deepest = node->rb_left;
		}
		else if (node->rb_left == null)
		{
			deepest = node->rb_right;
		}
		else
		{
			deepest = rb_next(node);
			if (deepest->rb_right != null)
			{
				deepest = deepest->rb_right;
			}
			else if (((rb_node*)((deepest)->rb_parent_color & ~3)) != node)
			{
				deepest = ((rb_node*)((deepest)->rb_parent_color & ~3));
			}
		}

		return deepest;
	}

/*
 * after removal, update the tree to account for the removed entry
 * and any rebalance damage.
 */
	public static void rb_augment_erase_end(rb_node* node, rb_augment_f func, object data)
	{
		if (node != null)
		{
			rb_augment_path(node, func, data);
		}
	}

	/* Find logical next and previous nodes in a tree */
	public static rb_node* rb_next(rb_node* node)
	{
		rb_node* parent;

		if (((rb_node*)((node)->rb_parent_color & ~3)) == node)
		{
			return null;
		}

		/* If we have a right-hand child, go down and then left as far
		   as we can. */
		if (node->rb_right != null)
		{
			node = node->rb_right;
			while (node->rb_left != null)
			{
				node = node->rb_left;
			}
			return (rb_node*)node;
		}

		/* No right-hand children.  Everything down and left is
		   smaller than us, so any 'next' node must be in the general
		   direction of our parent. Go up the tree; any time the
		   ancestor is a right-hand child of its parent, keep going
		   up. First time it's a left-hand child of its parent, said
		   parent is our 'next' node. */
		while ((parent = ((rb_node*)((node)->rb_parent_color & ~3))) != null && node == parent->rb_right)
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = parent;
			node = parent;
		}

		return parent;
	}
	public static rb_node* rb_prev(rb_node* node)
	{
		rb_node* parent;

		if (((rb_node*)((node)->rb_parent_color & ~3)) == node)
		{
			return null;
		}

		/* If we have a left-hand child, go down and then right as far
		   as we can. */
		if (node->rb_left != null)
		{
			node = node->rb_left;
			while (node->rb_right != null)
			{
				node = node->rb_right;
			}
			return (rb_node*)node;
		}

		/* No left-hand children. Go up till we find an ancestor which
		   is a right-hand child of its parent */
		while ((parent = ((rb_node*)((node)->rb_parent_color & ~3))) != null && node == parent->rb_left)
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = parent;
			node = parent;
		}

		return parent;
	}

/*
 * This function returns the first node (in sort order) of the tree.
 */
	public static rb_node* rb_first(rb_root* root)
	{
		rb_node* n;

		n = root->rb_node;
		if (n == null)
		{
			return null;
		}
		while (n->rb_left != null)
		{
			n = n->rb_left;
		}
		return n;
	}
	public static rb_node* rb_last(rb_root* root)
	{
		rb_node* n;

		n = root->rb_node;
		if (n == null)
		{
			return null;
		}
		while (n->rb_right != null)
		{
			n = n->rb_right;
		}
		return n;
	}

	/* Fast replacement of a single node without remove/rebalance/add/rebalance */
	public static void rb_replace_node(rb_node* victim, rb_node* @new, rb_root* root)
	{
		rb_node* parent = ((rb_node*)((victim)->rb_parent_color & ~3));

		/* Set the surrounding nodes to point to the replacement */
		if (parent != null)
		{
			if (victim == parent->rb_left)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_left = new;
				parent->rb_left = @new;
			}
			else
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_right = new;
				parent->rb_right = @new;
			}
		}
		else
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: root->rb_node = new;
			root->rb_node = @new ;
		}
		if (victim->rb_left != null)
		{
			rb_set_parent(victim->rb_left, @new);
		}
		if (victim->rb_right != null)
		{
			rb_set_parent(victim->rb_right, @new);
		}

		/* Copy the pointers/colour from the victim to the replacement */
		*@new = *victim;
	}

	internal static void rb_link_node(rb_node* node, rb_node* parent, rb_node** rb_link)
	{
		node->rb_parent_color = (long)parent;
		node->rb_left = node->rb_right = null;

		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
		//ORIGINAL LINE: *rb_link = node;
		*rb_link = node;
	}

//#endif

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define EXPORT_SYMBOL(a)

	internal static void __rb_rotate_left(rb_node* node, rb_root* root)
	{
		rb_node* right = node->rb_right;
		rb_node* parent = ((rb_node*)((node)->rb_parent_color & ~3));

		if ((node->rb_right == right->rb_left))
		{
			rb_set_parent(right->rb_left, node);
		}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: right->rb_left = node;
		right->rb_left = node;

		rb_set_parent(right, parent);

		if (parent != null)
		{
			if (node == parent->rb_left)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_left = right;
				parent->rb_left = right;
			}
			else
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_right = right;
				parent->rb_right = right;
			}
		}
		else
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: root->rb_node = right;
			root->rb_node = right;
		}
		rb_set_parent(node, right);
	}

	internal static void __rb_rotate_right(rb_node* node, rb_root* root)
	{
		rb_node* left = node->rb_left;
		rb_node* parent = ((rb_node*)((node)->rb_parent_color & ~3));

		if ((node->rb_left == left->rb_right))
		{
			rb_set_parent(left->rb_right, node);
		}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: left->rb_right = node;
		left->rb_right = node;

		rb_set_parent(left, parent);

		if (parent != null)
		{
			if (node == parent->rb_right)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_right = left;
				parent->rb_right = left;
			}
			else
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: parent->rb_left = left;
				parent->rb_left = left;
			}
		}
		else
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: root->rb_node = left;
			root->rb_node = left;
		}
		rb_set_parent(node, left);
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;

	internal static void __rb_erase_color(rb_node* node, rb_node* parent, rb_root* root)
	{
		rb_node* other;

		while ((node == null || (((node)->rb_parent_color & 1))!=0) && node != root->rb_node)
		{
			if (parent->rb_left == node)
			{
				other = parent->rb_right;
				if (((other)->rb_parent_color & 1) == 0)
				{
					do
					{
						(other)->rb_parent_color |= 1;
					} while (0 != 0);
					do
					{
						(parent)->rb_parent_color=( (parent)->rb_parent_color & ~1);
					} while (0 != 0);
					__rb_rotate_left(parent, root);
					other = parent->rb_right;
				}
				if ((other->rb_left == null || (((other->rb_left)->rb_parent_color & 1))!=0) && (other->rb_right == null || (((other->rb_right)->rb_parent_color & 1)!=0)))
				{
					do
					{
						(other)->rb_parent_color=( (other)->rb_parent_color & ~1);
					} while (0 != 0);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = parent;
					node = parent;
					parent = ((rb_node*)((node)->rb_parent_color & ~3));
				}
				else
				{
					if (other->rb_right == null || ((other->rb_right)->rb_parent_color & 1)!=0)
					{
						do
						{
							(other->rb_left)->rb_parent_color |= 1;
						} while (0 != 0);
						do
						{
							(other)->rb_parent_color= ((other)->rb_parent_color & ~1);
						} while (0 != 0);
						__rb_rotate_right(other, root);
						other = parent->rb_right;
					}
					rb_set_color(other, (((parent)->rb_parent_color & 1)));
					do
					{
						(parent)->rb_parent_color |= 1;
					} while (0 != 0);
					do
					{
						(other->rb_right)->rb_parent_color |= 1;
					} while (0 != 0);
					__rb_rotate_left(parent, root);
					node = root->rb_node;
					break;
				}
			}
			else
			{
				other = parent->rb_left;
				if (((other)->rb_parent_color & 1)==0)
				{
					do
					{
						(other)->rb_parent_color |= 1;
					} while (0 != 0);
					do
					{
						(parent)->rb_parent_color = ((parent)->rb_parent_color & ~1);
					} while (0 != 0);
					__rb_rotate_right(parent, root);
					other = parent->rb_left;
				}
				if ((other->rb_left == null || (((other->rb_left)->rb_parent_color & 1))!=0) && (other->rb_right == null || ((other->rb_right)->rb_parent_color & 1)!=0))
				{
					do
					{
						(other)->rb_parent_color = ((other)->rb_parent_color &~1);
					} while (0 != 0);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = parent;
					node = parent;
					parent = ((rb_node*)((node)->rb_parent_color & ~3));
				}
				else
				{
					if (other->rb_left == null || ((other->rb_left)->rb_parent_color & 1)!=0)
					{
						do
						{
							(other->rb_right)->rb_parent_color |= 1;
						} while (0 != 0);
						do
						{
							(other)->rb_parent_color = ((other)->rb_parent_color& ~1);
						} while (0 != 0);
						__rb_rotate_left(other, root);
						other = parent->rb_left;
					}
					rb_set_color(other, ((parent)->rb_parent_color & 1));
					do
					{
						(parent)->rb_parent_color |= 1;
					} while (0 != 0);
					do
					{
						(other->rb_left)->rb_parent_color |= 1;
					} while (0 != 0);
					__rb_rotate_right(parent, root);
					node = root->rb_node;
					break;
				}
			}
		}
		if (node != null)
		{
			do
			{
			(node)->rb_parent_color |= 1;
			} while (0 != 0);
		}
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;

	internal static void rb_augment_path(rb_node* node, rb_augment_f func, object data)
	{
		rb_node* parent;

	up:
		func(node, data);
		parent = ((rb_node*)((node)->rb_parent_color & ~3));
		if (parent == null)
		{
			return;
		}

		if (node == parent->rb_left && parent->rb_right != null)
		{
			func(parent->rb_right, data);
		}
		else if (parent->rb_left!=null)
		{
			func(parent->rb_left, data);
		}

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: node = parent;
		node = parent;
		goto up;
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;


//从左往右换行绘制

	//字符间距定义

	//计算返回值中的行数
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TS_FONT_GET_LINE(i) (((unsigned int)((i)&0xFFF00000)) >> 20)

	//计算返回值中的off值
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TS_FONT_GET_OFF(i) ((unsigned int)((i)&0x000FFFFF))

	/**
	 * 从左往右画字符串,只支持Unicode编码
	 * 
	 * 输入:
	 * pText:   必须是Unicode编码的字符串
	 * x,y:       显示文本的左上角x,y坐标
	 * r:      定义可视区域(位于可视区域外的部分将不被显示)
	 * c:   定义画笔颜色
	 * flag: 取值见定义:(可以用或操作符'|'来表示多种样式)
	 *
	 * 返回:
	 * a) 一个32位的int值:
	 *					  TS_FONT_GET_LINE(i) - 占用行数(未被忽略的字符均计算在内,半行算作一行)
	 *					  TS_FONT_GET_OFF(i) - 第一个被忽略的字符的off值,若off==len,则说明全部字符都参与了运算
	 *											   被忽略的字符是指: 此字符开始的之后的所有字符,均不可能在可视区域内.
	 * b) -1 失败
	 */
	public static int tsf_drawTextLeft( byte* pcText, short x, short y, mr_screenRectSt rect, ushort color, ushort flag, object userData)
	{
		if (pcText == null || rect.w == 0 || rect.h == 0)
		{
			return -1;
		}

		{
			ushort ch;
			byte* current_bitmap;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
			byte * p = (byte*)pcText;
			int chx = x;
			int chy = y;
			int totalIndex;
			int totalPoint;
			int X1;
			int Y1;
			int index_I;
			int index_J;
			byte temp = 0;
			int right = rect.x + rect.w;
			int btm = rect.y + rect.h;
			int fw;
			int fh = g_nowUse.fontHeight;
			int flen;
			int lines = 0;
			int tx;
			int ty;

			//生成unicode/GB编码值
			ch = (ushort)((*p << 8) + *(p + 1));
			while (ch != 0)
			{
				if ((ch == 0x0a) || (ch == 0x0d))
				{ //换行处理
					if (ch == 0x0d) //移除第二个换行符
					{
						p += 2;
					}

					if ((flag & DefineConstants.TSF_CRLFNEWLINE) != 0)
					{
						chy += (short)(fh + DefineConstants.TS_FONT_VMARGIN);
						chx = x;
						lines++;
					}
					else
					{
						goto end;
					}

					goto next;
				}
				else if (ch == ' ' || ch == '\t')
				{ //空格、制表符 处理
					chx += (short)(ch == ' ' ? g_nowUse.AsciiWidth : 4 * g_nowUse.AsciiWidth);

					if ((chx > right))
					{ //自动换行属性
						if (((DefineConstants.TSF_AUTONEWLINE & flag)) != 0)
						{
							chy += (short)(fh + DefineConstants.TS_FONT_VMARGIN);
							chx = x;
							lines++;
						}
						else
						{
							goto end;
						}
					}

					goto next;
				}
				else
				{ //其他字符
					current_bitmap = tsf_getCharBitmap(ch);

					fw = *current_bitmap; //字符宽
					flen = *(current_bitmap+(1)); //点阵字节数
					current_bitmap += 2;
				}

				// if(chx > right && chy > btm)	//超出了绘制区域
				//	goto end;

				//测量换行
				if (((chx + fw) > right))
				{
					if ((flag & DefineConstants.TSF_AUTONEWLINE) != 0)
					{
						chy += (fh + DefineConstants.TS_FONT_VMARGIN);
						chx = x;
						lines++;
					}
					else
					{
						goto end;
					}
				}

				//填充点阵
				// if( ((chx + fw) <= right)
				//	&& (chx >= rect.x)
				//	&& ((chy + fh) <= btm)
				//	&& (chy >= rect.y)
				//	&& chx >= 0
				//	&& chy >= 0)
				{
					totalPoint = fh * fw;
					X1 = Y1 = 0;
					totalIndex = 0;

					for (index_I = 0; index_I < flen; index_I++) //点阵占字节数
					{
						temp = current_bitmap[index_I];

						for (index_J = 0; index_J < 8; index_J++)
						{
							tx = chx + X1; ty = chy + Y1;
							totalIndex++;

							if (tx < rect.x || ty < rect.y || tx > right || ty > btm)
							{
								//
							}
							else if ((temp & masks[index_J])!=0)
							{ //屏幕绘点
								setPixelFunc((uint)tx, (uint)ty, color, userData);
							}
							X1++;
							if ((totalIndex % fw) == 0)
							{ //点阵换行
								Y1++;
								X1 = 0;
							}
							if (totalIndex >= totalPoint)
							{
								break;
							}
						}
					}
			}

				//累计宽度
				chx = chx + fw + DefineConstants.TS_FONT_HMARGIN;
			next:
				p += 2; //下一个字符
				ch = (ushort)((*p << 8) + *(p + 1));
			}

		end:
			return (int)(((lines << 20) & 0xFFF00000) | (p - pcText));
	}

		return 0;
	}

//单行绘制

	/**
	 * 绘制单行文本
	 *
	 * 遇到换行符立即返回
	 *
	 * flag 无效
	 */
	public static int tsf_drawText( byte* chr, short x, short y, ushort color, object userData)
	{
		if (chr == null)
		{
			return -1;
		}

		int totalPoint;
		int totalIndex;
		int index_I;
		int index_J;
		ushort ch = 0;
		int X1;
		int Y1;
		int chx;
		int chy;
		byte* current_bitmap;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		byte * p = chr;
		byte temp = 0;
		int fw;
		int fh = g_nowUse.fontHeight;
		int flen;
		int tx;
		int ty;

		ch = (ushort)((*p << 8) + *(p + 1));

		chx = x;
		chy = y;
		while (ch != 0)
		{
			X1 = Y1 = 0;
			totalIndex = totalPoint = 0;

			if ((ch == '\r') || (ch == '\n'))
			{ //换行直接返回
				return 1;
			}
			else if (ch == ' ')
			{ //空格则空格
				chx += g_nowUse.AsciiWidth;
				//超出屏幕范围检查
				if ((chx) > scnw)
				{
					return 1;
				}
				goto next;
			}
			else if (ch == '\t')
			{
				chx += 4 * g_nowUse.AsciiWidth;
				//超出屏幕范围检查
				if ((chx) > scnw)
				{
					return 1;
				}
				goto next;
			}
			else
			{
				current_bitmap = tsf_getCharBitmap(ch);

				fw = current_bitmap[0];
				flen = current_bitmap[1];
				current_bitmap += 2;
				if (fw == 0)
				{
					fw = g_nowUse.GBWidth;
				}
			}

			//超出屏幕范围检查
			if ((chx + fw) > scnw)
			{
				return 1;
			}

			//绘制点阵
			totalPoint = fh * fw;
			totalIndex = 0;
			for (index_I = 0; index_I < flen; index_I++)
			{
				temp = current_bitmap[index_I];

				for (index_J = 0; index_J < 8; index_J++)
				{
					tx = chx + X1; ty = chy + Y1;
					totalIndex++;

					if (tx < 0 || ty < 0 || tx > scnw - 1 || ty > scnh - 1)
					{
					}
					else if ((temp & masks[index_J])!=0)
					{
						setPixelFunc((uint)(chx + X1), (uint)(chy + Y1), color, userData);
					}
					X1++;
					if ((totalIndex % fw) == 0)
					{
						Y1++;
						X1 = 0;
					}
					if (totalIndex >= totalPoint)
					{
						break;
					}
				}
			}

			chx = chx + fw + DefineConstants.TS_FONT_HMARGIN; //字间距为 4
		next:
			p += 2;
			ch = (ushort)((*p << 8) + *(p + 1));
		}
		return 1;
	}

//获取多行文本宽高

	/**
	 * 获取多行文本宽高
	 * 
	 * 输入：
	 *		showWidth：待显示文本区域的宽度，将根据该宽度对文本断行
	 *
	 * 输出：
	 *		width：多行文本最宽的一行
	 *		height：所有行总高度（包括行间距 TS_FONT_VMARGIN）
	 *		lines：总行数
	 *
	 * 返回：-1 失败，0 成功
	 */
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'height', so pointers on this parameter are left unchanged:
	public static int tsf_textWidthHeightLines( byte* pcText, ushort showWidth, ref int width, int * height, ref int lines)
	{
		ushort chU;
		int tempAdd = 0;
		int tempWidth = 0;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *tempChr = (byte *)pcText;
		byte* tempChr = pcText;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *bmpPoint = null;
		byte* bmpPoint = null;
		int linewidth = showWidth;

		width = *height = lines = 0;

		if (tempChr == null || showWidth == 0)
		{
			return -1;
		}

		chU = (ushort)((*tempChr << 8) + *(tempChr + 1));
		bool isGotoNewLine=false;
		while (chU != 0)
		{
			if (chU == ' ') //空格
			{
				tempAdd = g_nowUse.AsciiWidth;

				goto LineCheck;
			}
			else if (chU == '\t')
			{
				tempAdd = 4 * g_nowUse.AsciiWidth;

				goto LineCheck;
			}
			else if (chU == 0x0a || chU == 0x0d)
			{
				if (chU == 0x0d) //移除第二个换行符
				{
					tempChr += 2;
				}
				//goto NewLine;
				isGotoNewLine = true;
			}
			else
			{
				bmpPoint = tsf_getCharBitmap(chU);
				tempAdd = (*bmpPoint + DefineConstants.TS_FONT_HMARGIN);
			}

		LineCheck:
			if (isGotoNewLine||tempWidth + tempAdd > linewidth)
			{
		NewLine:
				width = (tempWidth > width) ? tempWidth : width;
				*height += g_nowUse.fontHeight + DefineConstants.TS_FONT_VMARGIN;

				lines++;
				tempWidth = 0;
				isGotoNewLine = false;
			}
			else
			{
				tempWidth += tempAdd;
			}

			//下一个字符
			tempChr += 2;
			chU = (ushort)((*tempChr << 8) + *(tempChr + 1));
		}

		*height += g_nowUse.fontHeight + DefineConstants.TS_FONT_VMARGIN;
		width = (tempWidth > width) ? tempWidth : width;
		lines++;

		return 0;
	}

//获取单行文本宽高

	/**
	 * 获取单行文本宽高
	 * 
	 * 输出：
	 *		width：多行文本最宽的一行
	 *		height：所有行总高度（注意：不包括行间距 TS_FONT_VMARGIN）
	 */
	public static int tsf_textWidthHeight( byte* pcText, ref int width, ref int height)
	{
		ushort chU;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *p = (byte *)pcText;
		byte* p = pcText;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *bmpPoint = null;
		byte* bmpPoint = null;
		int w = 0;

		if (p == null)
		{
			return -1;
		}

		chU = (ushort)((*p << 8) + *(p + 1));
		while (chU != 0)
		{
			if (chU == ' ')
			{ //空格    //|| (chU == 0x0a) || (chU == 0x0d)
				w += g_nowUse.AsciiWidth;
			}
			else if (chU == '\t')
			{ //制表符 4空格代替
				w += 4 * g_nowUse.AsciiWidth;
			}
			else
			{
				bmpPoint =tsf_getCharBitmap(chU);
				w += *bmpPoint + DefineConstants.TS_FONT_HMARGIN;
			}

			p += 2;
			chU = (ushort)((*p << 8) + *(p + 1));
		}

		if (height != 0)
		{
			height = g_nowUse.fontHeight; // + TS_FONT_VMARGIN;    //包括间距
		}
		if (width != 0)
		{
			width = w;
		}

		return DefineConstants.MR_SUCCESS;
	}

	public static int tsf_charWidthHeight(ushort chU, ref int width, ref int height)
	{
		if (height != 0)
		{
			height = g_nowUse.fontHeight;
		}
		if (width != 0)
		{
			width = *tsf_getCharBitmap(chU);
		}
		return 0;
	}

//获取字符点阵位图
//第一个字节 字宽 第二个字节 字字节数

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: byte *tsf_getCharBitmap(ushort ch)
	public static byte* tsf_getCharBitmap(ushort ch)
	{
		int offset = GetOffSet(ch);

		if (offset == 0)
		{
			offset = GetOffSet(0x53e3); //返回 □
			if (offset == 0)
			{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memset' has no equivalent in C#:
				memset(Buf, 0, DefineConstants.FONT_DES);
				return (byte*)getBytePtr ( Buf);
			}
		}
		//第一个字节 字宽 第二个字节 字字节数
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memcpy' has no equivalent in C#:
		memcpy((void *)getBytePtr ( Buf), g_nowUse.PointBuf + offset, DefineConstants.FONT_DES);
		return (byte*)getBytePtr(Buf);
	}

	public delegate void setPixelFunc_t(uint x, uint y, ushort color, object userData);

//初始化字库
	public static int tsf_init(uint scrW, uint scrH)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'extern' variable declarations are not required in C#:
	//	extern byte font16_st[399063];
		byte* head =(byte*)getBytePtr( fontPoint.font16_st);

		scnw = scrW;
		scnh = scrH;
		//setPixelFunc = fn;
		setPixelFunc += setPixel;
		//读取unicode索引表信息
		g_nowUse.uIndexOff = *(int*)(head + 12);
		g_nowUse.uIndexLen = *(int*)(head + 16);
		g_nowUse.uIndexBuf = head + g_nowUse.uIndexOff;

		//读取点阵表信息
		g_nowUse.PointOff = *(int*)(head + 20);
		g_nowUse.PointLen = *(int*)(head + 24);
		g_nowUse.PointBuf = head + g_nowUse.PointOff;

		//字体尺寸信息
		g_nowUse.GBWidth = head[28];
		g_nowUse.AsciiWidth = head[29];
		g_nowUse.fontHeight = head[30];

		return DefineConstants.MR_SUCCESS;
	}


	internal static fontPoint g_nowUse = new fontPoint(); //当前使用的字库
	internal static byte[] Buf = new byte[DefineConstants.FONT_DES]; //字体点阵信息缓存
	internal static uint scnw; //屏幕尺寸
	internal static uint scnh;
	internal static setPixelFunc_t setPixelFunc;

	internal static readonly byte[] masks = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};

	//获取一个字符在字库点阵中的索引
	internal static int GetOffSet(ushort chr)
	{
		ushort iM = 0; //(一个索引项含16位UNICODE值16位偏移量)
		ushort iB = 1;
		ushort iE = 0;
		int UValue = 0;
		int indexLen = g_nowUse.uIndexLen;
		byte* buf = g_nowUse.uIndexBuf;

		iE = (ushort)(indexLen / 5);
		while (iB <= iE)
		{
			iM = (ushort)((iB + iE) / 2);
			UValue = buf[(iM - 1) * 5];
			UValue = UValue << 8;
			UValue += buf[(iM - 1) * 5 + 1];

			if (chr == UValue)
			{
				UValue = buf[(iM - 1) * 5 + 2];
				UValue = UValue << 8;
				UValue += buf[(iM - 1) * 5 + 3];
				UValue = UValue << 8;
				UValue += buf[(iM - 1) * 5 + 4];

				return UValue;
			}
			else if (chr > UValue)
			{
				iB = (ushort)(iM + 1);
			}
			else
			{
				iE = (ushort)(iM - 1);
			}
		}
		return 0;
	}

	/////////////////////////////////////////////////////////////////////////

	#if false
	//
	//#define SCREEN_WIDTH 240
	//#define SCREEN_HEIGHT 320
	//#define SCREEN_BUF_LEN (SCREEN_WIDTH * SCREEN_HEIGHT * 2)
	//
	//static uint16_t *screenBuf;
	//
	//static void mySetPixelFunc(int32 x, int32 y, uint16 color, void *userData) {
	//    if (x < 0 || y < 0 || x >= SCREEN_WIDTH || y >= SCREEN_HEIGHT) {
	//        return;
	//    }
	//    *(screenBuf + (x + SCREEN_WIDTH * y)) = color;
	//}
	//
	//void tsf_test() {
	//    tsf_init(SCREEN_WIDTH, SCREEN_HEIGHT, mySetPixelFunc);
	//
	//    screenBuf = malloc(SCREEN_BUF_LEN);
	//    memset(screenBuf, 0, SCREEN_BUF_LEN);
	//
	//    uint16 color = MAKERGB565(255, 255, 0);
	//
	//    // uint8 *out = (uint8 *)mr_c2u("hello", NULL, NULL);
	//    // tsf_drawText(out, 0, 0, c);
	//    // mr_free(out, 0);
	//
	//    // 中国
	//    char *str = "\x4e\x2d\x56\xfd\x00\x00";
	//    // helloworld
	//    // char *str = "\x0\x68\x0\x65\x0\x6c\x0\x6c\x0\x6f\x0\x77\x0\x6f\x0\x72\x0\x6c\x0\x64\x0\x0";
	//    tsf_drawText((uint8 *)str, 0, 0, color, NULL);
	//    printScreen("tsf_test.bmp", screenBuf);
	//}
	//
	#endif

	// 字节对齐
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define ALIGN(x, align) (((x) + ((align)-1)) & ~((align)-1))

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MAKERGB565(r, g, b) (uint16_t)(((uint32_t)(r >> 3) << 11) | ((uint32_t)(g >> 2) << 5) | ((uint32_t)(b >> 3)))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565R(v) ((((uint32_t)v >> 11) << 3) & 0xff)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565G(v) ((((uint32_t)v >> 5) << 2) & 0xff)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565B(v) (((uint32_t)v << 3) & 0xff)

	//public static int wstrlen(ref string txt)
	//{
	//	int i = 0;
	//	if (txt != 0)
	//	{
	//		while (txt[i] || txt[i + 1])
	//		{
	//			i += 2;
	//		}
	//	}
	//	return i;
	//}
	public static void cpsrToStr(uint v,  char* @out)
	{
		@out[0] = ((v & (1 << 31)) != 0) ? 'N' : 'n';
		@out[1] = ((v & (1 << 30)) != 0) ? 'Z' : 'z';
		@out[2] = ((v & (1 << 29)) != 0) ? 'C' : 'c';
		@out[3] = ((v & (1 << 28)) != 0) ? 'V' : 'v';
		@out[4] = '\0';
	}
	public static string memTypeStr(uc_mem_type type)
	{
		// clang-format off
		switch (type)
		{
		case uc_mem_type.UC_MEM_READ:
			return "UC_MEM_READ";
		case uc_mem_type.UC_MEM_WRITE:
			return "UC_MEM_WRITE";
		case uc_mem_type.UC_MEM_FETCH:
			return "UC_MEM_FETCH";
		case uc_mem_type.UC_MEM_READ_UNMAPPED:
			return "UC_MEM_READ_UNMAPPED";
		case uc_mem_type.UC_MEM_WRITE_UNMAPPED:
			return "UC_MEM_WRITE_UNMAPPED";
		case uc_mem_type.UC_MEM_FETCH_UNMAPPED:
			return "UC_MEM_FETCH_UNMAPPED";
		case uc_mem_type.UC_MEM_WRITE_PROT:
			return "UC_MEM_WRITE_PROT";
		case uc_mem_type.UC_MEM_READ_PROT:
			return "UC_MEM_READ_PROT";
		case uc_mem_type.UC_MEM_FETCH_PROT:
			return "UC_MEM_FETCH_PROT";
		case uc_mem_type.UC_MEM_READ_AFTER:
			return "UC_MEM_READ_AFTER";
		}
		// clang-format on
		return "<error type>";
	}
	public static void dumpREG(uc_engine uc)
	{
		uint v;
		uint cpsr;

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_CPSR,out cpsr);
		// clang-format off
		Console.Write("==========================REG=================================\n");
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R0, out v);
		Console.Write(" R0=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R1, out v);
		Console.Write("R1=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R2, out v);
		Console.Write(" R2=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R3, out v);
		Console.Write(" R3=0x{0:X8}\tN:{1:D}\n", v, (cpsr & (1 << 31))>>31);

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R4, out v);
		Console.Write(" R4=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R5, out v);
		Console.Write("R5=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R6, out v);
		Console.Write(" R6=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R7, out v);
		Console.Write(" R7=0x{0:X8}\tZ:{1:D}\n", v, (cpsr & (1 << 30))>>30);

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R8, out v);
		Console.Write(" R8=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R9, out v);
		Console.Write("R9=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R10, out v);
		Console.Write("R10=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R11, out v);
		Console.Write("R11=0x{0:X8}\tC:{1:D}\n", v, (cpsr & (1 << 29))>>29);

		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_R12, out v);
		Console.Write("R12=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_SP, out v);
		Console.Write("SP=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_LR, out v);
		Console.Write(" LR=0x{0:X8}\t", v);
		uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_PC, out v);
		Console.Write(" PC=0x{0:X8}\tV:{1:D}\n", v, (cpsr & (1 << 28))>>28);
		Console.Write("==============================================================\n");
		// clang-format on
	}
	public static void dumpMemStr(void* ptr, uint len)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		sbyte * p = (sbyte*)ptr;
		for (int i = 0; i < len; i++)
		{
			if (isgraph(*p))
			{
				Console.Write(p);
			}
			else
			{
				Console.Write(".");
			}
			p++;
		}
	}
	public static void runCode(uc_engine uc, long startAddr, long stopAddr, bool isThumb)
	{
		// uint32_t value = stopAddr + 8;
		// if (value == startAddr) {
		//     value = stopAddr;
		// }
		long value = stopAddr;
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_LR, value); // 当程序执行到这里时停止运行(return)

		// Note we start at ADDRESS | 1 to indicate THUMB mode.
		startAddr = isThumb ? (startAddr | 1) : startAddr;
		uc_err err = uc_emu_start(uc, startAddr, stopAddr, 0, 0); // 似乎unicorn 1.0.2之前并不会在pc==stopAddr时立即停止
		if (err != 0)
		{
			Console.Write("Failed on uc_emu_start() with error returned: {0:D} ({1})\n", err, uc_strerror(err));
			Environment.Exit(1);
		}
	}

/*
将字符串看成是split分隔的数组，多个连续的split会看成一个，返回的内存需要free
"dump,,,a.bin,0x2b3e16,,0xff"
*/
	public static sbyte* getSplitStr(sbyte* str, sbyte split, int n)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		sbyte * start = (sbyte*)str;
		sbyte* end;
		sbyte* ret;
		sbyte* mem;
		int count = 0;

		if (start == null)
		{
			return null;
		}
		if (n == 0)
		{
			goto retResult;
		}
		while (*start != 0)
		{
			if (*start != split)
			{
				start++;
				continue;
			}
			count++;
			while (*start!=0 && (*start == split))
			{
				start++;
			}
			if (count == n)
			{
				goto retResult;
			}
		}
		return null;
	retResult:
		end = start;
		while (end != null && (*end != split))
		{
			end++;
		}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		ret =(sbyte *) malloc(end - start + 1);
		mem = ret;
		while (start < end)
		{
			*mem = *start;
			mem ++;
			start++;
		}
		*mem = (sbyte)'\0';
		return ret;
	}

//////////////////////////////////////////////////////////////////////////////


	public static uIntMap* uIntMap_search(rb_root* root, uint key)
	{
		rb_node* n = root->rb_node;
		uIntMap* obj;
		int cmp;
        int i = 10000;
		while (i>0&&n != null)
		{
            i--;
			//obj = ({const @typeof(((uIntMap)0).node) * __mptr = (n); (uIntMap)((string)__mptr - ((uint) & ((uIntMap)0).node));});
			obj = rb_entry(n);

			cmp =(int)( key - obj->key);
			if (cmp < 0)
			{
				n = n->rb_left;
			}
			else if (cmp > 0)
			{
				n = n->rb_right;
			}
			else
			{
				return obj;
			}
		}
		return null;
	}

	public static uIntMap * rb_entry(rb_node* parent )
    {
		return (uIntMap*)parent;
    }

	public static int uIntMap_insert(rb_root* root, uIntMap* obj)
	{
		rb_node** p = &(root->rb_node);
		rb_node* parent = null;
		uIntMap* cur;
		int cmp;

		while ((*p)!=null)
		{
			parent = p[0];
			//cur = ({const @typeof(((uIntMap)0).node) * __mptr = (parent); (uIntMap)((string)__mptr - ((uint) & ((uIntMap)0).node));});
			cur = rb_entry (parent);
			cmp = (int)(obj->key - cur->key);
			if (cmp < 0)
			{
				p = &(*p)->rb_left;
			}
			else if (cmp > 0)
			{
				p = &(*p)->rb_right;
			}
			else
			{
				return -1;
			}
		}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: The following line was determined to be a copy constructor call - this should be verified and a copy constructor should be created if it does not yet exist:
//ORIGINAL LINE: rb_link_node(&obj->node, parent, p);
		rb_link_node(&obj->node, parent, p);
		rb_insert_color(&obj->node, root);
		return 0;
	}
	public static uIntMap* uIntMap_delete(rb_root* root, uint key)
	{
		uIntMap* obj = uIntMap_search(root, key);
		if (obj == null)
		{
			return null;
		}
		rb_erase(&obj->node, root);
		return obj;
	}

	public static int wstrlen(char[] txt)
	{
		int i = 0;
		if (txt!=null)
		{
			//while (txt[i]=='/0' || txt[i + 1]) i += 2;
			i = txt.Length;
		}
		return i;
	}

	public static long copyWstrToMrp(string str)
	{
		if (str == null)
		{
			return 0;
		}
		int len = wstrlen(str.ToCharArray ()) + 2;
		void * p = my_mallocExt(len);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memcpy' has no equivalent in C#:
		memcpy(p, str, len);
		return toMrpMemAddr(p);
	}

	public static long copyStrToMrp(string str)
	{
		if (str == null)
		{
			return 0;
		}
		int len = (int)(str.Length + 1);
		void* p = my_mallocExt(len);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memcpy' has no equivalent in C#:
		memcpy(p, str, len);
		return toMrpMemAddr(p);
	}

// 只支持240*320大小
	public static void printScreen(sbyte* filename,  ushort* buf)
	{
		// clang-format off
		byte[] bmpHeader = {0x42, 0x4D, 0x48, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x58, 0x02, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
		// clang-format on
		int fh = my_open(filename, DefineConstants.MR_FILE_CREATE | DefineConstants.MR_FILE_RDWR);
		my_write(fh,(void *)getBytePtr ( bmpHeader), sizeof(byte));
		my_write(fh, buf, 240 * 320 * 2);
		ushort end = 0;
		my_write(fh, &end, sizeof(ushort));
		my_close(fh);
	}
	public static int CLOCK_MONOTONIC = 1;
	public static long get_uptime_ms()
	{
		timespec ts = new timespec();
		clock_gettime(CLOCK_MONOTONIC, ts);
		return (long)ts.tv_sec * 1000 + (ts.tv_nsec / 1000000);
	}
	public static long get_time_ms()
	{
		timeval tv = new timeval();
		if (-1 == gettimeofday(tv, null))
		{
			return -1;
		}
		return (long)tv.tv_sec * 1000 + (tv.tv_usec / 1000);
	}
	public static int getDatetime(mr_datetime* datetime)
	{
		if (datetime == null)
		{
			return DefineConstants.MR_FAILED;
		}

		time_t now = new time_t();
		tm t;

		time(now);
		t = localtime(now);

		datetime->year =(ushort )( t.tm_year + 1900);
		datetime->month =(byte )( t.tm_mon + 1);
		datetime->day = t.tm_mday;
		datetime->hour = t.tm_hour;
		datetime->minute = t.tm_min;
		datetime->second = t.tm_sec;

		return DefineConstants.MR_SUCCESS;
	}




	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STACK_ADDRESS (CODE_ADDRESS + CODE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define BRIDGE_TABLE_ADDRESS (STACK_ADDRESS + STACK_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MEMORY_MANAGER_ADDRESS (BRIDGE_TABLE_ADDRESS + BRIDGE_TABLE_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_ADDRESS (MEMORY_MANAGER_ADDRESS + MEMORY_MANAGER_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT * 2)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define START_ADDRESS CODE_ADDRESS
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STOP_ADDRESS (SCREEN_BUF_ADDRESS + SCREEN_BUF_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TOTAL_MEMORY (STOP_ADDRESS - START_ADDRESS)

	internal static void testInsert(rb_root* root, uint key, string  data)
	{

		uIntMap obj=new uIntMap ();
		int ret;

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//obj = (uIntMap*)malloc(sizeof(uIntMap));
		obj.key = key;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: obj->data = data;
		obj.data =(void*)getBytePtr ( data.ToCharArray ());
		ret = uIntMap_insert(root, &obj);
		if (ret == -1)
		{
			Console.Write("insert failed {0:D} exists.\n", key);
			return;
		}
		Console.Write("insert {0:D} success.\n", key);
	}

	internal static void testSearch(rb_root* root, uint key)
	{
		uIntMap* obj = uIntMap_search(root, key);
		if (obj == null)
		{
			Console.Write("search: not found {0:D}\n", key);
		}
		else
		{
			Console.Write("search: {0:D}={1}\n", key,obj->data);
		}
	}

	internal static void printAll(rb_root* root)
	{
		//for (struct rb_node * p = rb_first(root); p != null; p = rb_next(p))
		//{
		//	uIntMap obj = ({const @typeof(((uIntMap)0).node) * __mptr = (p); (uIntMap)((string)__mptr - ((uint) & ((uIntMap)0).node));});
		//	Console.Write("iterator: {0:D}  \t  {1}\n", obj.key, (string)obj.data);
		//}
	}

	internal static void testDelete(rb_root* root, uint key)
	{
		uIntMap* obj = uIntMap_delete(root, key);
		if (obj != null)
		{
			Console.Write("delete {0:D} {1}\n", obj->key, obj->data);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
			free(obj);
		}
		else
		{
			Console.Write("delete {0:D} not found\n", key);
		}
	}

	public static void uIntMap_testMain()
	{
		//struct rb_root root = (struct rb_root)
		//{
		//	null,
		//};

        rb_root* root=null;

		testInsert(root, 100, "hell");
		testInsert(root, 0, "world");
		testInsert(root, 0, "world2");
		testInsert(root, 990, "test");

		printAll(root);

		testSearch(root, 990);
		testSearch(root, 22);

		testDelete(root, 990);
		testDelete(root, 990);
		testSearch(root, 990);

		printAll(root);
		testInsert(root, 990, "test2");
		printAll(root);
	}
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define LOG(format, ...) printf(">> " format "\n", ##__VA_ARGS__)
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: A test for this #define occurs before this statement, so this statement cannot be moved to the top of the file:
	//#define LOG
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define NULL (void*)0
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define EM_PORT_API(rettype) rettype
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_color(r) ((r)->rb_parent_color & 1)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_is_red(r) (!rb_color(r))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_is_black(r) rb_color(r)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_ROOT (struct rb_root) { NULL, }
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define rb_entry(ptr, type, member) container_of(ptr, type, member)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );})
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_EMPTY_NODE(node) (rb_parent(node) == node)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define RB_CLEAR_NODE(node) (rb_set_parent(node, node))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define offsetof(type, field) ((size_t) & ((type *)0)->field)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define countof(x) (sizeof(x) / sizeof((x)[0]))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define ALIGN(x, align) (((x) + ((align)-1)) & ~((align)-1))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MAKERGB565(r, g, b) (uint16_t)(((uint32_t)(r >> 3) << 11) | ((uint32_t)(g >> 2) << 5) | ((uint32_t)(b >> 3)))
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565R(v) ((((uint32_t)v >> 11) << 3) & 0xff)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565G(v) ((((uint32_t)v >> 5) << 2) & 0xff)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define PIXEL565B(v) (((uint32_t)v << 3) & 0xff)



	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STACK_ADDRESS (CODE_ADDRESS + CODE_SIZE)

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define BRIDGE_TABLE_ADDRESS (STACK_ADDRESS + STACK_SIZE)

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define MEMORY_MANAGER_ADDRESS (BRIDGE_TABLE_ADDRESS + BRIDGE_TABLE_SIZE)

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_ADDRESS (MEMORY_MANAGER_ADDRESS + MEMORY_MANAGER_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define SCREEN_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT * 2)

	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define START_ADDRESS CODE_ADDRESS
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define STOP_ADDRESS (SCREEN_BUF_ADDRESS + SCREEN_BUF_SIZE)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TOTAL_MEMORY (STOP_ADDRESS - START_ADDRESS)

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'extern' variable declarations are not required in C#:
	//extern ushort *screenBuf; // 屏幕缓冲区地址

	public static byte* getMrpMemPtr(long addr)
	{
		return (byte*)(mrpMem + (addr - DefineConstants.CODE_ADDRESS));
	}

	public static uint toMrpMemAddr(void * ptr)
	{
		return (uint)(((byte*)ptr - mrpMem) + DefineConstants.CODE_ADDRESS);
	}
	public static int UC_ARCH_ARM=1;
	public static int UC_MODE_ARM = 0;
	public static int UC_HOOK_CODE=4;
	public static int UC_HOOK_MEM_INVALID;
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int vmrp_test();
	public static uc_engine initVmrp(string filename)
	{
		uc_engine uc;
		uc_err err ;
		uc_hook trace = new uc_hook();

		err = uc_open(UC_ARCH_ARM, UC_MODE_ARM,out uc);
		if (err !=0)
		{
			//Console.Write("Failed on uc_open() with error returned: {0:D} ({1})\n", err, uc_strerror(err));
			return null;
		}

		if (!mem_init(uc, filename))
		{
			Console.Write("mem_init() fail\n");
			goto end;
		}

		err = bridge_init(uc);
		if (err != 0)
		{
			//Console.Write("Failed bridge_init(): {0:D} ({1})\n", err, uc_strerror(err));
			goto end;
		}

	#if DEBUG
		// uc_hook_add(uc, &trace, UC_HOOK_BLOCK, hook_block, NULL, 1, 0);
		// uc_hook_add(uc, &trace, UC_HOOK_MEM_VALID, hook_mem_valid, NULL, 1, 0);
		uc_hook_add(uc, trace, UC_HOOK_CODE, hook_code, null, 1, 0);
		// uc_hook_add(uc, &trace, UC_HOOK_CODE, hook_code, NULL, BRIDGE_TABLE_ADDRESS, BRIDGE_TABLE_ADDRESS + BRIDGE_TABLE_SIZE);
	#else
		uc_hook_add(uc, trace, UC_HOOK_CODE, hook_code, null, ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE), ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE, 0);
	#endif
		uc_hook_add(uc, trace, UC_HOOK_MEM_INVALID, hook_mem_invalid, null, 1, 0, 0);

		// 设置栈
		uint value = (DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE; // 满递减
		uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_SP, value);

		// 调用第一个函数
		value = 1;
        value = 0x1234;
        uc_reg_write(uc, uc_arm_reg.UC_ARM_REG_R0, value); // 传参数值1
		runCode(uc, DefineConstants.CODE_ADDRESS+8 , DefineConstants.CODE_ADDRESS + 52, false);
        //runCode(uc, MR_TABLE_ADDRESS+100, MR_TABLE_ADDRESS+108, false);

        Console.Write("\n ----------------------------init done.--------------------------------------- \n");
		return uc;
	end:
		uc_close(uc);
		return null;
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int freeVmrp();

	// 需要外部实现的接口
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void guiDrawBitmap(ref ushort bmp, int x, int y, int w, int h);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int timerStart(ushort t);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int timerStop();




	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define BRIDGE_FUNC_MAP(offset, mapType, field, init, func, extraData) { #field, offset, mapType, init, func, extraData }
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TS_FONT_GET_LINE(i) (((unsigned int)((i)&0xFFF00000)) >> 20)
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: The following #define macro was replaced in-line:
	//ORIGINAL LINE: #define TS_FONT_GET_OFF(i) ((unsigned int)((i)&0x000FFFFF))

	#if __EMSCRIPTEN__
	#endif

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: ushort *screenBuf;
	public static ushort* screenBuf;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *mrpMem;
	public static byte* mrpMem; // 模拟器的全部内存

	// 返回的内存不能free
#if __EMSCRIPTEN__
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Statements that are interrupted by preprocessor statements are not converted by C++ to C# Converter Cracked By X-Cracker 2017:
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EMSCRIPTEN_KEEPALIVE
#endif

#if __EMSCRIPTEN__
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Statements that are interrupted by preprocessor statements are not converted by C++ to C# Converter Cracked By X-Cracker 2017:
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following statement was not recognized, possibly due to an unrecognized macro:
	EMSCRIPTEN_KEEPALIVE
#endif
	public static string PRIx64 = "llX";
	#if DEBUG
	internal static void hook_block(uc_engine uc, ulong address, uint size, object user_data)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf(">>> Tracing basic block at 0x%" +PRIx64+ ", block size = 0x%x\n", address, size);
		Console.Write(">>> Tracing basic block at 0x% +PRIx64+ , block size = 0x{1:x}\n", address, size);
	}
	internal static void hook_mem_valid(uc_engine uc, uc_mem_type type, uint address, int size, long value, object user_data)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf(">>> Tracing mem_valid mem_type:%s at 0x%" +PRIx64+ ", size:0x%x, value:0x%" +PRIx64+ "\n", memTypeStr(type), address, size, value);
		Console.Write(">>> Tracing mem_valid mem_type:{0} at 0x%" +PRIx64+ ", size:0x{2:x}, value:0x%" +PRIx64+ "\n", memTypeStr(type), address, size, value);
		if (type == uc_mem_type.UC_MEM_READ && size <= 4)
		{
			uint v;
			uint pc;
			uc_mem_read(uc, address,out v, size);
			uc_reg_read(uc, uc_arm_reg.UC_ARM_REG_PC,out pc);
			Console.Write("PC:0x{0:X},read:0x{1:X}\n", pc, v);
		}
	}
	#endif

	internal static void hook_code(uc_engine uc, ulong address, uint size, object user_data)
	{
	#if DEBUG
		hook_code_debug(uc, address, size);
	#endif
		if (address >= ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) && address <= ((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE)
		{
			bridge(uc, uc_mem_type.UC_MEM_FETCH, address);
		}
	}

	internal static bool hook_mem_invalid(uc_engine uc, uc_mem_type type, ulong address, int size, long value, object user_data)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf(">>> Tracing mem_invalid mem_type:%s at 0x%" +PRIx64+ ", size:0x%x, value:0x%" +PRIx64+ "\n", memTypeStr(type), address, size, value);
		Console.Write(">>> Tracing mem_invalid mem_type:{0} at 0x%" +PRIx64+ ", size:0x{2:x}, value:0x%" +PRIx64+ "\n", memTypeStr(type), address, size, value);
		dumpREG(uc);
		return false;
	}
    internal static uint length;
    internal static int loadCode(uc_engine uc, string filename)
	{
		string extFilename = "cfunction.ext";
		int value;

//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to value types:
//ORIGINAL LINE: byte *code;
		byte* code;
		int ret = readMrpFileEx(getStringPtr( filename), extFilename, out value, out length, &code);
		if (ret == -1)
		{
			Console.Write(">> " +"load {0} failed" +"\n",__VA_ARGS__);
			return ret;
		}
		Console.Write(">> "+ "load {0} suc: offset:{1:D}, length:{2:D}" +"\n", extFilename, value, length);

		uc_mem_write(uc, DefineConstants.CODE_ADDRESS, code, length);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
		free(code);
		return ret;
	}

	internal static bool mem_init(uc_engine uc,  string filename)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		mrpMem = malloc(((((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE) + (DefineConstants.SCREEN_WIDTH * DefineConstants.SCREEN_HEIGHT * 2)) - DefineConstants.CODE_ADDRESS));
		screenBuf = (ushort *)getMrpMemPtr(((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE));

		// unicorn存在BUG，UC_HOOK_MEM_INVALID只能拦截第一次UC_MEM_FETCH_PROT，所以干脆设置成可执行，统一在UC_HOOK_CODE事件中处理
		uc_err err = uc_mem_map_ptr(uc, DefineConstants.CODE_ADDRESS, 
			((((((DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE) + DefineConstants.MEMORY_MANAGER_SIZE) + (DefineConstants.SCREEN_WIDTH * DefineConstants.SCREEN_HEIGHT * 2))),
			uc_prot.UC_PROT_ALL, mrpMem);
		if (err != 0)
		{
			Console.Write("Failed mem map: {0:D} ({1})\n", err, uc_strerror(err));
			return false;
		}

		if (loadCode(uc,  filename) == DefineConstants.MR_FAILED)
		{
			return false;
		}

		initMemoryManager((((DefineConstants.CODE_ADDRESS + DefineConstants.CODE_SIZE) + DefineConstants.STACK_SIZE) + DefineConstants.BRIDGE_TABLE_SIZE), DefineConstants.MEMORY_MANAGER_SIZE);
		return true;
	}

	public static int freeVmrp(uc_engine uc)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'free' has no equivalent in C#:
		free(mrpMem);
		uc_close(uc);
		return 0;
	}


//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//DSM_EXPORT_FUNCS dsm_init(DSM_REQUIRE_FUNCS inFuncs);


//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//object my_mallocExt(uint len);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void my_freeExt(object p);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void initMemoryManager(uint baseAddress, uint len);


//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_closeNetwork();
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_initNetwork(MR_INIT_NETWORK_CB cb, string mode);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_getHostByName(string name, MR_GET_HOST_CB cb);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_socket(int type, int protocol);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_closeSocket(int s);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_send(int s, string buf, int len);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_recv(int s, ref string buf, int len);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int my_connect(int s, int ip, ushort port, int type);


}